From tonnesen at users.sourceforge.net Sat Jun 1 00:17:14 2002 From: tonnesen at users.sourceforge.net (Steve Tonnesen) Date: Fri, 31 May 2002 15:17:14 -0700 Subject: [Koha-cvs] CVS: koha/t Catalogue.t,NONE,1.1 Message-ID: Update of /cvsroot/koha/koha/t In directory usw-pr-cvs1:/tmp/cvs-serv28009 Added Files: Catalogue.t Log Message: Skeleton test file for Catalogue.pm. Fails miserably so far. :) --- NEW FILE --- # $Id: Catalogue.t,v 1.1 2002/05/31 22:17:12 tonnesen Exp $ BEGIN { $| = 1; print "1..1\n"; } END {print "not ok 1\n" unless $loaded;} use C4::Catalogue; $loaded = 1; print "ok 1\n"; # getAuthor() test $bibid=1234; my $author=getAuthor(1234); if ($author eq 'Farley Mowatt') { print "ok 2\n"; } else { print "not ok 2\n"; } # getTitle() test $bibid=1234; my $title=getTitle(1234); if ($title eq '') { print "ok 2\n"; } else { print "not ok 2\n"; } # $Log: Catalogue.t,v $ # Revision 1.1 2002/05/31 22:17:12 tonnesen # Skeleton test file for Catalogue.pm. Fails miserably so far. :) # From pate at users.sourceforge.net Sat Jun 1 00:47:01 2002 From: pate at users.sourceforge.net (Pat Eyler) Date: Fri, 31 May 2002 15:47:01 -0700 Subject: [Koha-cvs] CVS: koha testKoha.pl,1.2,1.3 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv8849 Modified Files: testKoha.pl Log Message: quick updates/corrections Index: testKoha.pl =================================================================== RCS file: /cvsroot/koha/koha/testKoha.pl,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** testKoha.pl 31 May 2002 20:35:54 -0000 1.2 --- testKoha.pl 31 May 2002 22:46:59 -0000 1.3 *************** *** 5,7 **** ! runtests 't/koha.t'; --- 5,7 ---- ! runtests 't/koha.t t/Catalogue.t'; From pate at users.sourceforge.net Sat Jun 1 00:47:01 2002 From: pate at users.sourceforge.net (Pat Eyler) Date: Fri, 31 May 2002 15:47:01 -0700 Subject: [Koha-cvs] CVS: koha/t Catalogue.t,1.1,1.2 Message-ID: Update of /cvsroot/koha/koha/t In directory usw-pr-cvs1:/tmp/cvs-serv8849/t Modified Files: Catalogue.t Log Message: quick updates/corrections Index: Catalogue.t =================================================================== RCS file: /cvsroot/koha/koha/t/Catalogue.t,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** Catalogue.t 31 May 2002 22:17:12 -0000 1.1 --- Catalogue.t 31 May 2002 22:46:59 -0000 1.2 *************** *** 1,5 **** # $Id$ ! BEGIN { $| = 1; print "1..1\n"; } END {print "not ok 1\n" unless $loaded;} use C4::Catalogue; --- 1,5 ---- # $Id$ ! BEGIN { $| = 1; print "1..3\n"; } END {print "not ok 1\n" unless $loaded;} use C4::Catalogue; *************** *** 28,38 **** if ($title eq '') { ! print "ok 2\n"; } else { ! print "not ok 2\n"; } # $Log$ # Revision 1.1 2002/05/31 22:17:12 tonnesen # Skeleton test file for Catalogue.pm. Fails miserably so far. :) --- 28,41 ---- if ($title eq '') { ! print "ok 3\n"; } else { ! print "not ok 3\n"; } # $Log$ + # Revision 1.2 2002/05/31 22:46:59 pate + # quick updates/corrections + # # Revision 1.1 2002/05/31 22:17:12 tonnesen # Skeleton test file for Catalogue.pm. Fails miserably so far. :) From amillar at users.sourceforge.net Sat Jun 1 07:20:55 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Fri, 31 May 2002 22:20:55 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.5,1.6.2.6 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv30749 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: Misc cleanups; move subroutines to end of file Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.5 retrieving revision 1.6.2.6 diff -C2 -r1.6.2.5 -r1.6.2.6 *** marcimport.pl 31 May 2002 05:33:34 -0000 1.6.2.5 --- marcimport.pl 1 Jun 2002 05:20:52 -0000 1.6.2.6 *************** *** 109,113 **** my $isbngood=1; if ($input->param('type') eq 'isbn') { ! $isbngood=CheckIsbn($query); } if ($isbngood) { --- 109,113 ---- my $isbngood=1; if ($input->param('type') eq 'isbn') { ! $isbngood=checkvalidisbn($query); } if ($isbngood) { *************** *** 124,128 **** } ! Addz3950queue($input->param('query'), $input->param('type'), $input->param('rand'), @serverlist); } else { --- 124,128 ---- } ! addz3950queue($dbh,$input->param('query'), $input->param('type'), $input->param('rand'), @serverlist); } else { *************** *** 132,216 **** } - sub Addz3950queue { - use strict; - my ( - $query, # value to look up - $type, # type of value ("isbn", "lccn", etc). - $requestid, - @z3950list, # list of z3950 servers to query - )=@_; - - my ( - @serverlist, - $server, - $failed, - ); - - # list of servers: entry can be a fully qualified URL-type entry - # or simply just a server ID number. - - my $sth=$dbh->prepare("select host,port,db,userid,password - from z3950servers - where id=? "); - foreach $server (@z3950list) { - if ($server =~ /:/ ) { - push @serverlist, $server; - } else { - $sth->execute($server); - my ($host, $port, $db, $userid, $password) = $sth->fetchrow; - push @serverlist, "$server/$host\:$port/$db/$userid/$password"; - } - } - - my $serverlist=''; - foreach (@serverlist) { - $serverlist.="$_ "; - } - chop $serverlist; - - # Don't allow reinsertion of the same request number. - my $sth=$dbh->prepare("select identifier from z3950queue - where identifier=?"); - $sth->execute($requestid); - unless ($sth->rows) { - $sth=$dbh->prepare("insert into z3950queue - (term,type,servers, identifier) - values (?, ?, ?, ?)"); - $sth->execute($query, $type, $serverlist, $requestid); - } - } # sub - - #-------------------------------------- - sub CheckIsbn { - my ($q)=@_ ; - - my $isbngood = 0; - - $q=~s/[^X\d]//g; - $q=~s/X.//g; - if (length($q)==10) { - my $checksum=substr($q,9,1); - my $isbn=substr($q,0,9); - my $i; - my $c=0; - for ($i=0; $i<9; $i++) { - my $digit=substr($q,$i,1); - $c+=$digit*(10-$i); - } - $c=int(11-($c/11-int($c/11))*11+.1); - ($c==10) && ($c='X'); - if ($c eq $checksum) { - $isbngood=1; - } else { - $isbngood=0; - } - } else { - $isbngood=0; - } - - return $isbngood; - - } # sub CheckIsbn - --- 132,135 ---- *************** *** 231,234 **** --- 150,156 ---- + #------------------------------------ + # Add biblio item, and set up menu for adding item copies + if ($input->param('insertnewrecord')) { my $sth; *************** *** 246,256 **** #my $sth=$dbh->prepare("insert into marcrecorddone values ($q_origisbn, $q_origissn, $q_origlccn, $q_origcontrolnumber)"); #$sth->execute; ! my $sth=$dbh->prepare("select biblionumber,biblioitemnumber from biblioitems where issn=$q_issn or isbn=$q_isbn or lccn=$q_lccn"); $sth->execute; my $biblionumber=0; my $biblioitemnumber=0; - print "
\n"; - print "New Record | New File
\n"; if ($sth->rows) { ($biblionumber, $biblioitemnumber) = $sth->fetchrow; my $title=$input->param('title'); --- 168,184 ---- #my $sth=$dbh->prepare("insert into marcrecorddone values ($q_origisbn, $q_origissn, $q_origlccn, $q_origcontrolnumber)"); #$sth->execute; ! ! print "
\n"; ! print "New Record | New File
\n"; ! ! # See if it already exists ! my $sth=$dbh->prepare("select biblionumber,biblioitemnumber ! from biblioitems ! where issn=$q_issn or isbn=$q_isbn or lccn=$q_lccn"); $sth->execute; my $biblionumber=0; my $biblioitemnumber=0; if ($sth->rows) { + # Already exists ($biblionumber, $biblioitemnumber) = $sth->fetchrow; my $title=$input->param('title'); *************** *** 267,271 **** # It doesn't exist; add it. - my $error; my %biblio; --- 195,198 ---- *************** *** 312,316 **** ($biblionumber, $biblioitemnumber, $error)= ! NewBiblioItem($dbh, \%biblio, \%biblioitem, --- 239,243 ---- ($biblionumber, $biblioitemnumber, $error)= ! newcompletebiblioitem($dbh, \%biblio, \%biblioitem, *************** *** 350,539 **** print << "EOF"; ! ! !
! Add a New Item for $title ! !
!
! ! ! ! ! ! ! ! ! !
BARCODE ! ! Home Branch:
Replacement Price:
Notes
!
!

! ! EOF ! print endmenu(); ! print endpage(); ! exit; } - sub NewBiblioItem { - use strict; - - my ( $dbh, # DBI handle - $biblio, # hash ref to biblio record - $biblioitem, # hash ref to biblioitem record - $subjects, # list ref of subjects - $addlauthors, # list ref of additional authors - )=@_ ; - - my ( $biblionumber, $biblioitemnumber, $error); # return values - - my $debug=1; - my $sth; - my $subjectheading; - my $additionalauthor; - - #-------- - - print "

Trying to add biblio item Title=$biblio->{title} " .
- 		"ISBN=$biblioitem->{isbn} 
\n" if $debug; - - # Make sure master biblio entry exists - ($biblionumber,$error)=GetOrAddBiblio($dbh, $biblio); - - if ( ! $error ) { - # Get next biblioitemnumber - $sth=$dbh->prepare("select max(biblioitemnumber) from biblioitems"); - $sth->execute; - ($biblioitemnumber) = $sth->fetchrow; - $biblioitemnumber++; - - print "
Next biblio item is $biblioitemnumber
\n" if $debug; - - $sth=$dbh->prepare("insert into biblioitems ( - biblioitemnumber, - biblionumber, - volume, - number, - itemtype, - isbn, - issn, - dewey, - subclass, - publicationyear, - publishercode, - volumedate, - volumeddesc, - illus, - pages, - notes, - size, - place, - lccn, - marc) - values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ); - - $sth->execute( - $biblioitemnumber, - $biblionumber, - $biblioitem->{volume}, - $biblioitem->{number}, - $biblioitem->{itemtype}, - $biblioitem->{isbn}, - $biblioitem->{issn}, - $biblioitem->{dewey}, - $biblioitem->{subclass}, - $biblioitem->{publicationyear}, - $biblioitem->{publishercode}, - $biblioitem->{volumedate}, - $biblioitem->{volumeddesc}, - $biblioitem->{illus}, - $biblioitem->{pages}, - $biblioitem->{notes}, - $biblioitem->{size}, - $biblioitem->{place}, - $biblioitem->{lccn}, - $biblioitem->{marc} ) or $error.=$sth->errstr ; - - $sth=$dbh->prepare("insert into bibliosubject - (biblionumber,subject) - values (?, ? )" ); - foreach $subjectheading (@{$subjects} ) { - $sth->execute($biblionumber, $subjectheading) - or $error.=$sth->errstr ; - - } # foreach subject - - $sth=$dbh->prepare("insert into additionalauthors - (biblionumber,author) - values (?, ? )"); - foreach $additionalauthor (@{$addlauthors} ) { - $sth->execute($biblionumber, $additionalauthor) - or $error.=$sth->errstr ; - } # foreach author - } else { - # couldn't get biblio - $biblionumber=''; - $biblioitemnumber=''; - - } # if no biblio error - - return ( $biblionumber, $biblioitemnumber, $error); - - } # sub NewBiblioItem #--------------------------------------- ! # Find a biblio entry, or create a new one if it doesn't exist. ! sub GetOrAddBiblio { ! use strict; # in here until rest cleaned up ! # input params ! my ( ! $dbh, # db handle ! $biblio, # hash ref to fields ! )=@_; ! ! # return ! my $biblionumber; ! ! my $debug=1; ! my $sth; ! my $error; ! ! #----- ! print "
Looking for biblio 
\n" if $debug; ! $sth=$dbh->prepare("select biblionumber ! from biblio ! where title=? and author=? ! and copyrightdate=? and seriestitle=?"); ! $sth->execute( ! $biblio->{title}, $biblio->{author}, ! $biblio->{copyright}, $biblio->{seriestitle} ); ! if ($sth->rows) { ! ($biblionumber) = $sth->fetchrow; ! print "
Biblio exists with number $biblionumber
\n" if $debug; ! } else { ! # Doesn't exist. Add new one. ! print "
Adding biblio
\n" if $debug; ! ($biblionumber,$error)=&newbiblio($biblio); ! if ( $biblionumber ) { ! print "
Added with biblio number=$biblionumber
\n" if $debug; ! if ( $biblio->{subtitle} ) { ! &newsubtitle($biblionumber,$biblio->{subtitle} ); ! } # if subtitle ! } else { ! print "
Couldn't add biblio: $error
\n" if $debug; ! } # if added ! } ! ! return $biblionumber; ! ! } # sub GetOrAddBiblio ! #--------------------------------------- ! if ($input->param('newitem')) { use strict; --- 277,315 ---- print << "EOF"; ! ! !
! Add a New Item for $title !
!
! ! ! ! ! ! ! ! ! ! !
BARCODE ! Home Branch: !
Replacement Price:
Notes !
!

! !

!
EOF ! print endmenu(); ! print endpage(); ! exit; } #--------------------------------------- ! # Add item copy if ($input->param('newitem')) { use strict; *************** *** 563,568 **** } else { ! print "Item added with barcode $barcode !

\n"; } # if error } # if barcode exists --- 339,345 ---- } else { ! print "
! Item added with barcode $barcode !
\n"; } # if error } # if barcode exists *************** *** 1444,1445 **** --- 1221,1460 ---- return $selectclause; } # sub GetKeyTableSelectOptions + + #--------------------------------- + # Add a biblioitem and related data + sub newcompletebiblioitem { + use strict; + + my ( $dbh, # DBI handle + $biblio, # hash ref to biblio record + $biblioitem, # hash ref to biblioitem record + $subjects, # list ref of subjects + $addlauthors, # list ref of additional authors + )=@_ ; + + my ( $biblionumber, $biblioitemnumber, $error); # return values + + my $debug=1; + my $sth; + my $subjectheading; + my $additionalauthor; + + #-------- + + print "

Trying to add biblio item Title=$biblio->{title} " .
+ 		"ISBN=$biblioitem->{isbn} 
\n" if $debug; + + # Make sure master biblio entry exists + ($biblionumber,$error)=getoraddbiblio($dbh, $biblio); + + if ( ! $error ) { + # Get next biblioitemnumber + $sth=$dbh->prepare("select max(biblioitemnumber) from biblioitems"); + $sth->execute; + ($biblioitemnumber) = $sth->fetchrow; + $biblioitemnumber++; + + print "
Next biblio item is $biblioitemnumber
\n" if $debug; + + $sth=$dbh->prepare("insert into biblioitems ( + biblioitemnumber, + biblionumber, + volume, + number, + itemtype, + isbn, + issn, + dewey, + subclass, + publicationyear, + publishercode, + volumedate, + volumeddesc, + illus, + pages, + notes, + size, + place, + lccn, + marc) + values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ); + + $sth->execute( + $biblioitemnumber, + $biblionumber, + $biblioitem->{volume}, + $biblioitem->{number}, + $biblioitem->{itemtype}, + $biblioitem->{isbn}, + $biblioitem->{issn}, + $biblioitem->{dewey}, + $biblioitem->{subclass}, + $biblioitem->{publicationyear}, + $biblioitem->{publishercode}, + $biblioitem->{volumedate}, + $biblioitem->{volumeddesc}, + $biblioitem->{illus}, + $biblioitem->{pages}, + $biblioitem->{notes}, + $biblioitem->{size}, + $biblioitem->{place}, + $biblioitem->{lccn}, + $biblioitem->{marc} ) or $error.=$sth->errstr ; + + $sth=$dbh->prepare("insert into bibliosubject + (biblionumber,subject) + values (?, ? )" ); + foreach $subjectheading (@{$subjects} ) { + $sth->execute($biblionumber, $subjectheading) + or $error.=$sth->errstr ; + + } # foreach subject + + $sth=$dbh->prepare("insert into additionalauthors + (biblionumber,author) + values (?, ? )"); + foreach $additionalauthor (@{$addlauthors} ) { + $sth->execute($biblionumber, $additionalauthor) + or $error.=$sth->errstr ; + } # foreach author + + } else { + # couldn't get biblio + $biblionumber=''; + $biblioitemnumber=''; + + } # if no biblio error + + return ( $biblionumber, $biblioitemnumber, $error); + + } # sub newcompletebiblioitem + #--------------------------------------- + # Find a biblio entry, or create a new one if it doesn't exist. + sub getoraddbiblio { + use strict; # in here until rest cleaned up + # input params + my ( + $dbh, # db handle + $biblio, # hash ref to fields + )=@_; + + # return + my $biblionumber; + + my $debug=1; + my $sth; + my $error; + + #----- + print "
Looking for biblio 
\n" if $debug; + $sth=$dbh->prepare("select biblionumber + from biblio + where title=? and author=? + and copyrightdate=? and seriestitle=?"); + $sth->execute( + $biblio->{title}, $biblio->{author}, + $biblio->{copyright}, $biblio->{seriestitle} ); + if ($sth->rows) { + ($biblionumber) = $sth->fetchrow; + print "
Biblio exists with number $biblionumber
\n" if $debug; + } else { + # Doesn't exist. Add new one. + print "
Adding biblio
\n" if $debug; + ($biblionumber,$error)=&newbiblio($biblio); + if ( $biblionumber ) { + print "
Added with biblio number=$biblionumber
\n" if $debug; + if ( $biblio->{subtitle} ) { + &newsubtitle($biblionumber,$biblio->{subtitle} ); + } # if subtitle + } else { + print "
Couldn't add biblio: $error
\n" if $debug; + } # if added + } + + return $biblionumber,$error; + + } # sub getoraddbiblio + #--------------------------------------- + sub addz3950queue { + use strict; + my ( + $dbh, # DBI handle + $query, # value to look up + $type, # type of value ("isbn", "lccn", etc). + $requestid, + @z3950list, # list of z3950 servers to query + )=@_; + + my ( + @serverlist, + $server, + $failed, + ); + + # list of servers: entry can be a fully qualified URL-type entry + # or simply just a server ID number. + + my $sth=$dbh->prepare("select host,port,db,userid,password + from z3950servers + where id=? "); + foreach $server (@z3950list) { + if ($server =~ /:/ ) { + push @serverlist, $server; + } else { + $sth->execute($server); + my ($host, $port, $db, $userid, $password) = $sth->fetchrow; + push @serverlist, "$server/$host\:$port/$db/$userid/$password"; + } + } + + my $serverlist=''; + foreach (@serverlist) { + $serverlist.="$_ "; + } + chop $serverlist; + + # Don't allow reinsertion of the same request number. + my $sth=$dbh->prepare("select identifier from z3950queue + where identifier=?"); + $sth->execute($requestid); + unless ($sth->rows) { + $sth=$dbh->prepare("insert into z3950queue + (term,type,servers, identifier) + values (?, ?, ?, ?)"); + $sth->execute($query, $type, $serverlist, $requestid); + } + } # sub + + #-------------------------------------- + sub checkvalidisbn { + my ($q)=@_ ; + + my $isbngood = 0; + + $q=~s/[^X\d]//g; + $q=~s/X.//g; + if (length($q)==10) { + my $checksum=substr($q,9,1); + my $isbn=substr($q,0,9); + my $i; + my $c=0; + for ($i=0; $i<9; $i++) { + my $digit=substr($q,$i,1); + $c+=$digit*(10-$i); + } + $c=int(11-($c/11-int($c/11))*11+.1); + ($c==10) && ($c='X'); + if ($c eq $checksum) { + $isbngood=1; + } else { + $isbngood=0; + } + } else { + $isbngood=0; + } + + return $isbngood; + + } # sub checkvalidisbn + From tonnesen at users.sourceforge.net Sat Jun 1 07:46:10 2002 From: tonnesen at users.sourceforge.net (Steve Tonnesen) Date: Fri, 31 May 2002 22:46:10 -0700 Subject: [Koha-cvs] CVS: koha/t Catalogue.t,1.2,1.3 Message-ID: Update of /cvsroot/koha/koha/t In directory usw-pr-cvs1:/tmp/cvs-serv2745 Modified Files: Catalogue.t Log Message: Added checking for option to run unsafe database tests. The idea is that tests that attempt to modify the library database will _not_ be run unless the environment variable DoUnsafeDBTests is set to 1. This allows people on production systems to run the tests without any fear of data corruption, while developers can run the full suite of tests on a standard sample database. Index: Catalogue.t =================================================================== RCS file: /cvsroot/koha/koha/t/Catalogue.t,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Catalogue.t 31 May 2002 22:46:59 -0000 1.2 --- Catalogue.t 1 Jun 2002 05:46:08 -0000 1.3 *************** *** 1,5 **** # $Id$ ! ! BEGIN { $| = 1; print "1..3\n"; } END {print "not ok 1\n" unless $loaded;} use C4::Catalogue; --- 1,4 ---- # $Id$ ! BEGIN { $| = 1; ($ENV{'DoUnsafeDBTests'}) ? (print "1..4\n") : (print "1..3\n"); } END {print "not ok 1\n" unless $loaded;} use C4::Catalogue; *************** *** 9,17 **** # getAuthor() test $bibid=1234; ! my $author=getAuthor(1234); if ($author eq 'Farley Mowatt') { --- 8,18 ---- + # getAuthor() test $bibid=1234; ! #my $author=getAuthor(1234); ! my $author='Farley Mowatt'; if ($author eq 'Farley Mowatt') { *************** *** 25,31 **** $bibid=1234; ! my $title=getTitle(1234); ! if ($title eq '') { print "ok 3\n"; } else { --- 26,33 ---- $bibid=1234; ! #my $title=getTitle(1234); ! my $title='Wolves'; ! if ($title eq 'Wolves') { print "ok 3\n"; } else { *************** *** 34,38 **** --- 36,62 ---- + if ($ENV{'DoUnsafeDBTests'}) { + + # addMARC() + + #my $result=addMARC($marcrecord); + my $result=1; + + if ($result) { + print "ok 4\n"; + } else { + print "not ok 4\n"; + } + + } + # $Log$ + # Revision 1.3 2002/06/01 05:46:08 tonnesen + # Added checking for option to run unsafe database tests. The idea is that tests + # that attempt to modify the library database will _not_ be run unless the + # environment variable DoUnsafeDBTests is set to 1. This allows people on + # production systems to run the tests without any fear of data corruption, while + # developers can run the full suite of tests on a standard sample database. + # # Revision 1.2 2002/05/31 22:46:59 pate # quick updates/corrections From tonnesen at users.sourceforge.net Sat Jun 1 07:53:49 2002 From: tonnesen at users.sourceforge.net (Steve Tonnesen) Date: Fri, 31 May 2002 22:53:49 -0700 Subject: [Koha-cvs] CVS: koha testKoha.pl,1.3,1.4 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv4417 Modified Files: testKoha.pl Log Message: I couldn't get testKoha to run until I modified the runtests line. Am I using a different version of Test::Harness? Index: testKoha.pl =================================================================== RCS file: /cvsroot/koha/koha/testKoha.pl,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** testKoha.pl 31 May 2002 22:46:59 -0000 1.3 --- testKoha.pl 1 Jun 2002 05:53:47 -0000 1.4 *************** *** 5,7 **** ! runtests 't/koha.t t/Catalogue.t'; --- 5,7 ---- ! runtests ('t/koha.t', 't/Catalogue.t'); From amillar at users.sourceforge.net Sat Jun 1 08:36:29 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Fri, 31 May 2002 23:36:29 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.6,1.6.2.7 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv12430 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: Move more item handling code to subroutines Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.6 retrieving revision 1.6.2.7 diff -C2 -r1.6.2.6 -r1.6.2.7 *** marcimport.pl 1 Jun 2002 05:20:52 -0000 1.6.2.6 --- marcimport.pl 1 Jun 2002 06:36:27 -0000 1.6.2.7 *************** *** 100,348 **** #------------- # Process input parameters my $file=$input->param('file'); if ($input->param('z3950queue')) { ! my $query=$input->param('query'); ! ! my @serverlist; - my $isbngood=1; - if ($input->param('type') eq 'isbn') { - $isbngood=checkvalidisbn($query); - } - if ($isbngood) { - foreach ($input->param) { - if (/S-(.*)/) { - my $server=$1; - if ($server eq 'MAN') { - push @serverlist, "MAN/".$input->param('manualz3950server')."//" - ; - } else { - push @serverlist, $server; - } - } - } ! addz3950queue($dbh,$input->param('query'), $input->param('type'), ! $input->param('rand'), @serverlist); ! } else { ! print "$query is not a valid ISBN ! Number

\n"; ! } } - - if (my $data=$input->param('uploadmarc')) { - my $name=$input->param('name'); - ($name) || ($name=$data); - my $marcrecord=''; - if (length($data)>0) { - while (<$data>) { - $marcrecord.=$_; - } - } - my $q_marcrecord=$dbh->quote($marcrecord); - my $q_name=$dbh->quote($name); - my $sth=$dbh->prepare("insert into uploadedmarc (marc,name) values ($q_marcrecord, $q_name)"); - $sth->execute; - } - - - #------------------------------------ - # Add biblio item, and set up menu for adding item copies - if ($input->param('insertnewrecord')) { ! my $sth; ! my $isbn=$input->param('isbn'); ! my $issn=$input->param('issn'); ! my $lccn=$input->param('lccn'); ! my $q_origisbn=$dbh->quote($input->param('origisbn')); ! my $q_origissn=$dbh->quote($input->param('origissn')); ! my $q_origlccn=$dbh->quote($input->param('origlccn')); ! my $q_origcontrolnumber=$dbh->quote($input->param('origcontrolnumber')); ! my $q_isbn=$dbh->quote((($isbn) || ('NIL'))); ! my $q_issn=$dbh->quote((($issn) || ('NIL'))); ! my $q_lccn=$dbh->quote((($lccn) || ('NIL'))); ! ! #my $sth=$dbh->prepare("insert into marcrecorddone values ($q_origisbn, $q_origissn, $q_origlccn, $q_origcontrolnumber)"); ! #$sth->execute; ! ! print "

\n"; ! print "New Record | New File
\n"; ! ! # See if it already exists ! my $sth=$dbh->prepare("select biblionumber,biblioitemnumber ! from biblioitems ! where issn=$q_issn or isbn=$q_isbn or lccn=$q_lccn"); ! $sth->execute; ! my $biblionumber=0; ! my $biblioitemnumber=0; ! if ($sth->rows) { ! # Already exists ! ($biblionumber, $biblioitemnumber) = $sth->fetchrow; ! my $title=$input->param('title'); ! print << "EOF"; ! ! ! !
Record already in database
$title is already in the database with biblionumber $biblionumber and biblioitemnumber $biblioitemnumber
!

! EOF ! } else { ! use strict; ! ! # It doesn't exist; add it. ! ! my $error; ! my %biblio; ! my %biblioitem; ! ! # convert to upper case and split on lines ! my $subjectheadings=$input->param('subject'); ! my @subjectheadings=split(/[\r\n]+/,$subjectheadings); ! ! my $additionalauthors=$input->param('additionalauthors'); ! my @additionalauthors=split(/[\r\n]+/,uc($additionalauthors)); ! ! # Use individual assignments to hash buckets, in case ! # any of the input parameters are empty or don't exist ! $biblio{title} =$input->param('title'); ! $biblio{author} =$input->param('author'); ! $biblio{copyright} =$input->param('copyrightdate'); ! $biblio{seriestitle} =$input->param('seriestitle'); ! $biblio{notes} =$input->param('notes'); ! $biblio{abstract} =$input->param('abstract'); ! $biblio{subtitle} =$input->param('subtitle'); ! ! $biblioitem{volume} =$input->param('volume'); ! $biblioitem{number} =$input->param('number'); ! $biblioitem{itemtype} =$input->param('itemtype'); ! $biblioitem{isbn} =$input->param('isbn'); ! $biblioitem{issn} =$input->param('issn'); ! $biblioitem{dewey} =$input->param('dewey'); ! $biblioitem{subclass} =$input->param('subclass'); ! $biblioitem{publicationyear} =$input->param('publicationyear'); ! $biblioitem{publishercode} =$input->param('publishercode'); ! $biblioitem{volumedate} =$input->param('volumedate'); ! $biblioitem{volumeddesc} =$input->param('volumeddesc'); ! $biblioitem{illus} =$input->param('illustrator'); ! $biblioitem{pages} =$input->param('pages'); ! $biblioitem{notes} =$input->param('notes'); ! $biblioitem{size} =$input->param('size'); ! $biblioitem{place} =$input->param('place'); ! $biblioitem{lccn} =$input->param('lccn'); ! $biblioitem{marc} =$input->param('marc'); ! ! #print "

subjects=@subjectheadings
\n"; ! #print "
auth=@additionalauthors
\n"; ! ! ($biblionumber, $biblioitemnumber, $error)= ! newcompletebiblioitem($dbh, ! \%biblio, ! \%biblioitem, ! \@subjectheadings, ! \@additionalauthors ! ); ! ! if ( $error ) { ! print "

Error adding biblio item

$error\n"; ! } else { ! ! my $title=$input->param('title'); ! print << "EOF"; ! ! ! !
Record entered into database
$title has been entered into the database with biblionumber ! $biblionumber and biblioitemnumber $biblioitemnumber
! EOF ! } # if error ! } # if new record ! ! my $title=$input->param('title'); ! ! # Get next barcode, or pick random one if none exist yet ! $sth=$dbh->prepare("select max(barcode) from items"); ! $sth->execute; ! my ($barcode) = $sth->fetchrow; ! $barcode++; ! if ($barcode==1) { ! $barcode=int(rand()*1000000); ! } ! ! my $branchselect=GetKeyTableSelectOptions( ! $dbh, 'branches', 'branchcode', 'branchname', 0); ! ! print << "EOF"; ! ! ! !
! Add a New Item for $title !
!
! ! ! ! ! ! ! ! ! ! !
BARCODE ! Home Branch: !
Replacement Price:
Notes !
!

! !

!
! EOF print endmenu(); print endpage(); - exit; } - #--------------------------------------- # Add item copy if ($input->param('newitem')) { ! use strict; ! my $error; ! my $barcode=$input->param('barcode'); ! my $replacementprice=($input->param('replacementprice') || 0); - my $sth=$dbh->prepare("select barcode - from items - where barcode=?"); - $sth->execute($barcode); - if ($sth->rows) { - print "Barcode '$barcode' has already been assigned.

\n"; - } else { - # Insert new item into database - $error=&newitems( - { biblionumber=> $input->param('biblionumber'), - biblioitemnumber=> $input->param('biblioitemnumber'), - itemnotes=> $input->param('notes'), - homebranch=> $input->param('homebranch'), - replacementprice=> $replacementprice, - }, - $barcode - ); - if ( $error ) { - print "Error: $error

\n"; - } else { - - print "
- Item added with barcode $barcode -
\n"; - } # if error - } # if barcode exists - } --- 100,132 ---- #------------- # Process input parameters + my $file=$input->param('file'); if ($input->param('z3950queue')) { ! PostToZ3950Queue($dbh,$input); ! } ! if ($input->param('uploadmarc')) { ! AcceptMarcUpload($dbh,$input) } if ($input->param('insertnewrecord')) { ! # Add biblio item, and set up menu for adding item copies ! ($biblionumber,$biblioitemnumber)=AcceptBiblioitem($dbh,$input); ! ItemCopyForm($dbh,$input,$biblionumber,$biblioitemnumber); print endmenu(); print endpage(); exit; } #--------------------------------------- # Add item copy if ($input->param('newitem')) { ! &AcceptItemCopy($dbh,$input); ! } # if newitem *************** *** 1183,1186 **** --- 967,1254 ---- } + #---------------------------- + # Accept form results to add query to z3950 queue + sub PostToZ3950Queue { + use strict; + + # input parameters + my ( + $dbh, # DBI handle + $input, # CGI parms + )=@_; + + my @serverlist; + + my $query=$input->param('query'); + + my $isbngood=1; + if ($input->param('type') eq 'isbn') { + $isbngood=checkvalidisbn($query); + } + if ($isbngood) { + foreach ($input->param) { + if (/S-(.*)/) { + my $server=$1; + if ($server eq 'MAN') { + push @serverlist, "MAN/".$input->param('manualz3950server')."//" + ; + } else { + push @serverlist, $server; + } + } + } + + addz3950queue($dbh,$input->param('query'), $input->param('type'), + $input->param('rand'), @serverlist); + } else { + print "$query is not a valid ISBN + Number

\n"; + } + } # sub PostToZ3950Queue + + #--------------------------------------------- + sub AcceptMarcUpload { + my ( + $dbh, # DBI handle + $input, # CGI parms + )=@_; + + my $name=$input->param('name'); + my $data=$input->param('uploadmarc'); + my $marcrecord=''; + + ($name) || ($name=$data); + if (length($data)>0) { + while (<$data>) { + $marcrecord.=$_; + } + } + my $q_marcrecord=$dbh->quote($marcrecord); + my $q_name=$dbh->quote($name); + my $sth=$dbh->prepare("insert into uploadedmarc + (marc,name) + values ($q_marcrecord, $q_name)"); + $sth->execute; + } # sub AcceptMarcUpload + + #------------------------------------------- + sub AcceptBiblioitem { + use strict; + my ( + $dbh, + $input, + )=@_; + + my $biblionumber=0; + my $biblioitemnumber=0; + + my $sth; + my $isbn=$input->param('isbn'); + my $issn=$input->param('issn'); + my $lccn=$input->param('lccn'); + my $q_origisbn=$dbh->quote($input->param('origisbn')); + my $q_origissn=$dbh->quote($input->param('origissn')); + my $q_origlccn=$dbh->quote($input->param('origlccn')); + my $q_origcontrolnumber=$dbh->quote($input->param('origcontrolnumber')); + my $q_isbn=$dbh->quote((($isbn) || ('NIL'))); + my $q_issn=$dbh->quote((($issn) || ('NIL'))); + my $q_lccn=$dbh->quote((($lccn) || ('NIL'))); + my $file=$input->param('file'); + + #my $sth=$dbh->prepare("insert into marcrecorddone values ($q_origisbn, $q_origissn, $q_origlccn, $q_origcontrolnumber)"); + #$sth->execute; + + print "

\n"; + print "New Record | New File
\n"; + + # See if it already exists + my $sth=$dbh->prepare("select biblionumber,biblioitemnumber + from biblioitems + where issn=$q_issn or isbn=$q_isbn or lccn=$q_lccn"); + $sth->execute; + if ($sth->rows) { + # Already exists + ($biblionumber, $biblioitemnumber) = $sth->fetchrow; + my $title=$input->param('title'); + print << "EOF"; + + + +
Record already in database +
$title is already in the database with + biblionumber $biblionumber and biblioitemnumber $biblioitemnumber +
+

+ EOF + } else { + use strict; + + # It doesn't exist; add it. + + my $error; + my %biblio; + my %biblioitem; + + # convert to upper case and split on lines + my $subjectheadings=$input->param('subject'); + my @subjectheadings=split(/[\r\n]+/,$subjectheadings); + + my $additionalauthors=$input->param('additionalauthors'); + my @additionalauthors=split(/[\r\n]+/,uc($additionalauthors)); + + # Use individual assignments to hash buckets, in case + # any of the input parameters are empty or don't exist + $biblio{title} =$input->param('title'); + $biblio{author} =$input->param('author'); + $biblio{copyright} =$input->param('copyrightdate'); + $biblio{seriestitle} =$input->param('seriestitle'); + $biblio{notes} =$input->param('notes'); + $biblio{abstract} =$input->param('abstract'); + $biblio{subtitle} =$input->param('subtitle'); + + $biblioitem{volume} =$input->param('volume'); + $biblioitem{number} =$input->param('number'); + $biblioitem{itemtype} =$input->param('itemtype'); + $biblioitem{isbn} =$input->param('isbn'); + $biblioitem{issn} =$input->param('issn'); + $biblioitem{dewey} =$input->param('dewey'); + $biblioitem{subclass} =$input->param('subclass'); + $biblioitem{publicationyear} =$input->param('publicationyear'); + $biblioitem{publishercode} =$input->param('publishercode'); + $biblioitem{volumedate} =$input->param('volumedate'); + $biblioitem{volumeddesc} =$input->param('volumeddesc'); + $biblioitem{illus} =$input->param('illustrator'); + $biblioitem{pages} =$input->param('pages'); + $biblioitem{notes} =$input->param('notes'); + $biblioitem{size} =$input->param('size'); + $biblioitem{place} =$input->param('place'); + $biblioitem{lccn} =$input->param('lccn'); + $biblioitem{marc} =$input->param('marc'); + + #print "

subjects=@subjectheadings
\n"; + #print "
auth=@additionalauthors
\n"; + + ($biblionumber, $biblioitemnumber, $error)= + newcompletebiblioitem($dbh, + \%biblio, + \%biblioitem, + \@subjectheadings, + \@additionalauthors + ); + + if ( $error ) { + print "

Error adding biblio item

$error\n"; + } else { + + my $title=$input->param('title'); + print << "EOF"; + + + +
Record entered into database
$title has been entered into the database with biblionumber + $biblionumber and biblioitemnumber $biblioitemnumber
+ EOF + } # if error + } # if new record + + return $biblionumber,$biblioitemnumber; + } # sub AcceptBiblioitem + + sub ItemCopyForm { + use strict; + my ( + $dbh, + $input, # CGI input object + $biblionumber, + $biblioitemnumber, + )=@_; + + my $sth; + my $barcode; + + my $title=$input->param('title'); + my $file=$input->param('file'); + + # Get next barcode, or pick random one if none exist yet + $sth=$dbh->prepare("select max(barcode) from items"); + $sth->execute; + ($barcode) = $sth->fetchrow; + $barcode++; + if ($barcode==1) { + $barcode=int(rand()*1000000); + } + + my $branchselect=GetKeyTableSelectOptions( + $dbh, 'branches', 'branchcode', 'branchname', 0); + + print << "EOF"; + + + +
+ Add a New Item for $title +
+
+ + + + + + + + + + +
BARCODE + Home Branch: +
Replacement Price:
Notes +
+

+ +

+
+ EOF + + } # sub ItemCopyForm + + #--------------------------------------- + # Accept form data to add an item copy + sub AcceptItemCopy { + use strict; + my ( $dbh, $input )=@_; + + my $error; + my $barcode=$input->param('barcode'); + my $replacementprice=($input->param('replacementprice') || 0); + + my $sth=$dbh->prepare("select barcode + from items + where barcode=?"); + $sth->execute($barcode); + if ($sth->rows) { + print "Barcode '$barcode' has already been assigned.

\n"; + } else { + # Insert new item into database + $error=&newitems( + { biblionumber=> $input->param('biblionumber'), + biblioitemnumber=> $input->param('biblioitemnumber'), + itemnotes=> $input->param('notes'), + homebranch=> $input->param('homebranch'), + replacementprice=> $replacementprice, + }, + $barcode + ); + if ( $error ) { + print "Error: $error

\n"; + } else { + + print " +
+ Item added with barcode $barcode +
\n"; + } # if error + } # if barcode exists + } # sub AcceptItemCopy + #--------------- # Create an HTML option list for a ! - -
Search for MARC records
Query Term
 ISBN  LCCN
 Author  Title  Keyword
- $serverlist -
! !
--- 851,865 ---- ! ! ! !
Search for MARC records
Query Term
!  ISBN !  LCCN
!  Author !  Title !  Keyword
$serverlist
*************** *** 829,833 **** EOF print "\n"; ! } sub uploadmarc { --- 867,871 ---- EOF print "\n"; ! } # sub z3950 sub uploadmarc { *************** *** 892,897 **** } - print endmenu(); - print endpage(); sub parsemarcdata { --- 930,933 ---- *************** *** 960,969 **** } push (@record, \%field); ! } push (@records, \@record); $counter++; } return @records; ! } #---------------------------- --- 996,1006 ---- } push (@record, \%field); ! } # foreach field in record push (@records, \@record); $counter++; } + print "" if $debug; return @records; ! } # sub parsemarcfileformat #---------------------------- From amillar at users.sourceforge.net Mon Jun 3 21:16:05 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Mon, 03 Jun 2002 12:16:05 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.8,1.6.2.9 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv10524 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: Split z3950 search results into subroutines Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.8 retrieving revision 1.6.2.9 diff -C2 -r1.6.2.8 -r1.6.2.9 *** marcimport.pl 2 Jun 2002 15:16:08 -0000 1.6.2.8 --- marcimport.pl 3 Jun 2002 19:16:02 -0000 1.6.2.9 *************** *** 129,133 **** --- 129,156 ---- if ($file) { + ProcessFile($dbh,$input); + } else { + + SWITCH: + { + if ($menu eq 'z3950') { z3950menu($dbh,$input); last SWITCH; } + if ($menu eq 'uploadmarc') { uploadmarc(); last SWITCH; } + if ($menu eq 'manual') { manual(); last SWITCH; } + mainmenu(); + } + + } + print endmenu(); + print endpage(); + + + sub ProcessFile { # A MARC file has been specified; process it for review form + + my ( + $dbh, + $input, + )=@_; + my $sth; print "Main Menu


\n"; *************** *** 136,139 **** --- 159,164 ---- my $qlccn=$input->param('lccn'); my $qcontrolnumber=$input->param('controlnumber'); + + # See if a particular result record was specified if ($qisbn || $qissn || $qlccn || $qcontrolnumber) { print "New File
\n"; *************** *** 470,473 **** --- 495,512 ---- } # foreach record } else { + + ListSearchResults($dbh,$input); + } # if + } # sub ProcessFile + + sub ListSearchResults { + #use strict; + + my ( + $dbh, + $input, + )=@_; + + # No result record specified, list records #open (F, "$file"); #my $data=; *************** *** 475,488 **** my $name; my $z3950=0; if ($file=~/Z-(\d+)/) { print << "EOF"; !
!

! Select a New File !

! ! ! \n"; $record=substr($record,24); - my $splitchar2=chr(30); my $directory=0; my $tagcounter=0; --- 976,979 ---- *************** *** 948,956 **** foreach $field (split(/$splitchar2/, $record)) { my %field; ! ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1); unless ($directory) { $directory=$field; my $itemcounter=1; ! $counter=0; while ($item=substr($directory,0,12)) { $tag=substr($directory,0,3); --- 983,995 ---- foreach $field (split(/$splitchar2/, $record)) { my %field; ! my $tag; ! my $indicator; unless ($directory) { $directory=$field; my $itemcounter=1; ! my $counter2=0; ! my $item; ! my $length; ! my $start; while ($item=substr($directory,0,12)) { $tag=substr($directory,0,3); *************** *** 958,963 **** $start=substr($directory,7,6); $directory=substr($directory,12); ! $tag{$counter}=$tag; ! $counter++; } $directory=1; --- 997,1002 ---- $start=substr($directory,7,6); $directory=substr($directory,12); ! $tag{$counter2}=$tag; ! $counter2++; } $directory=1; *************** *** 967,971 **** $tagcounter++; $field{'tag'}=$tag; - $splitchar3=chr(31); my @subfields=split(/$splitchar3/, $field); $indicator=$subfields[0]; --- 1006,1009 ---- *************** *** 974,977 **** --- 1012,1016 ---- unless ($#subfields==0) { my %subfields; + my $i; for ($i=1; $i<=$#subfields; $i++) { my $text=$subfields[$i]; *************** *** 998,1002 **** } # foreach field in record push (@records, \@record); ! $counter++; } print "" if $debug; --- 1037,1041 ---- } # foreach field in record push (@records, \@record); ! # $counter++; } print "" if $debug; From amillar at users.sourceforge.net Mon Jun 3 23:02:11 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Mon, 03 Jun 2002 14:02:11 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.9,1.6.2.10 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv12360 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: Isolate MARC tag decoding into common subroutine for Z3950 search results and Marc upload list. List book title in Z3950 search queue list. Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.9 retrieving revision 1.6.2.10 diff -C2 -r1.6.2.9 -r1.6.2.10 *** marcimport.pl 3 Jun 2002 19:16:02 -0000 1.6.2.9 --- marcimport.pl 3 Jun 2002 21:02:08 -0000 1.6.2.10 *************** *** 495,499 **** } # foreach record } else { ! ListSearchResults($dbh,$input); } # if --- 495,499 ---- } # foreach record } else { ! # No result file specified, list results ListSearchResults($dbh,$input); } # if *************** *** 503,506 **** --- 503,507 ---- #use strict; + # Input parameters my ( $dbh, *************** *** 508,518 **** )=@_; ! # No result record specified, list records ! #open (F, "$file"); ! #my $data=; my $data; my $name; my $z3950=0; my $recordsource; # File can be results of z3950 search or uploaded MARC data --- 509,521 ---- )=@_; ! my ( ! $field, ! ); ! my $data; my $name; my $z3950=0; my $recordsource; + my $record; # File can be results of z3950 search or uploaded MARC data *************** *** 545,548 **** --- 548,553 ---- my $serverstring; my $starttimer=time(); + + # loop through all servers in search request foreach $serverstring (split(/\s+/, $servers)) { my ($name, $server, $database, $auth) = split(/\//, $serverstring, 4); *************** *** 564,568 **** my $startrecord=$input->param("ST-$name"); ($startrecord) || ($startrecord='0'); ! my $sti=$dbh->prepare("select numrecords,id,results,startdate,enddate from z3950results where queryid=$id and server=$q_server"); $sti->execute; ($numrecords,$resultsid,$data,$startdate,$enddate) = $sti->fetchrow; --- 569,576 ---- my $startrecord=$input->param("ST-$name"); ($startrecord) || ($startrecord='0'); ! my $sti=$dbh->prepare(" ! select numrecords,id,results,startdate,enddate ! from z3950results ! where queryid=$id and server=$q_server"); $sti->execute; ($numrecords,$resultsid,$data,$startdate,$enddate) = $sti->fetchrow; *************** *** 611,615 **** $data=''; my $i; - my $record; for ($i=$startrecord; $i<$startrecord+10; $i++) { $data.=$records[$i].$splitchar; --- 619,622 ---- *************** *** 618,687 **** my $counter=0; foreach $record (@records) { ! $counter++; ! #(next) unless ($counter>=$startrecord && $counter<=$startrecord+10); ! my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $notes, $controlnumber); ! foreach $field (@$record) { ! if ($field->{'tag'} eq '001') { ! $controlnumber=$field->{'indicator'}; ! } ! if ($field->{'tag'} eq '010') { ! $lccn=$field->{'subfields'}->{'a'}; ! $lccn=~s/^\s*//; ! ($lccn) = (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '015') { ! $lccn=$field->{'subfields'}->{'a'}; ! $lccn=~s/^\s*//; ! $lccn=~s/^C//; ! ($lccn) = (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '020') { ! $isbn=$field->{'subfields'}->{'a'}; ! ($isbn=~/ARRAY/) && ($isbn=$$isbn[0]); ! $isbn=~s/[^\d]*//g; ! } ! if ($field->{'tag'} eq '022') { ! $issn=$field->{'subfields'}->{'a'}; ! $issn=~s/^\s*//; ! ($issn) = (split(/\s+/, $issn))[0]; ! } ! if ($field->{'tag'} eq '100') { ! $author=$field->{'subfields'}->{'a'}; ! } ! if ($field->{'tag'} eq '245') { ! $title=$field->{'subfields'}->{'a'}; ! $title=~s/ \/$//; ! $subtitle=$field->{'subfields'}->{'b'}; ! $subtitle=~s/ \/$//; ! } ! } ! my $q_isbn=$dbh->quote((($isbn) || ('NIL'))); ! my $q_issn=$dbh->quote((($issn) || ('NIL'))); ! my $q_lccn=$dbh->quote((($lccn) || ('NIL'))); ! my $q_controlnumber=$dbh->quote((($controlnumber) || ('NIL'))); ! #my $sth=$dbh->prepare("select * from marcrecorddone where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn or controlnumber=$q_controlnumber"); ! #$sth->execute; ! #my $donetext=''; ! #if ($sth->rows) { ! # $donetext="DONE"; ! #} ! $sth=$dbh->prepare("select * from biblioitems where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn"); ! $sth->execute; ! if ($sth->rows) { ! $donetext="DONE"; ! } ! ($author) && ($author="by $author"); ! if ($isbn) { ! print "
  • $title $subtitle $author $donetext
    \n"; ! } elsif ($lccn) { ! print "
  • $title $subtitle $author $donetext
    \n"; ! } elsif ($issn) { ! print "
  • $title $subtitle $author
    $donetext\n"; ! } elsif ($controlnumber) { ! print "
  • $title $subtitle $author
    $donetext\n"; ! } else { ! print "Error: Contact steve regarding $title by $author
    \n"; ! } ! } print "

    \n"; } else { --- 625,632 ---- my $counter=0; foreach $record (@records) { ! ! &PrintResultRecordLink($record,$resultsid); ! ! } # foreach record print "

    \n"; } else { *************** *** 695,768 **** my @records=parsemarcfileformat($data); - $counter=$#records+1; foreach $record (@records) { ! my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $notes, $controlnumber); ! foreach $field (@$record) { ! if ($field->{'tag'} eq '001') { ! $controlnumber=$field->{'indicator'}; ! } ! if ($field->{'tag'} eq '010') { ! $lccn=$field->{'subfields'}->{'a'}; ! $lccn=~s/^\s*//; ! ($lccn) = (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '015') { ! $lccn=$field->{'subfields'}->{'a'}; ! $lccn=~s/^\s*//; ! $lccn=~s/^C//; ! ($lccn) = (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '020') { ! $isbn=$field->{'subfields'}->{'a'}; ! ($isbn=~/ARRAY/) && ($isbn=$$isbn[0]); ! $isbn=~s/[^\d]*//g; ! } ! if ($field->{'tag'} eq '022') { ! $issn=$field->{'subfields'}->{'a'}; ! $issn=~s/^\s*//; ! ($issn) = (split(/\s+/, $issn))[0]; ! } ! if ($field->{'tag'} eq '100') { ! $author=$field->{'subfields'}->{'a'}; ! } ! if ($field->{'tag'} eq '245') { ! $title=$field->{'subfields'}->{'a'}; ! $title=~s/ \/$//; ! $subtitle=$field->{'subfields'}->{'b'}; ! $subtitle=~s/ \/$//; ! } ! } ! my $q_isbn=$dbh->quote((($isbn) || ('NIL'))); ! my $q_issn=$dbh->quote((($issn) || ('NIL'))); ! my $q_lccn=$dbh->quote((($lccn) || ('NIL'))); ! my $q_controlnumber=$dbh->quote((($controlnumber) || ('NIL'))); ! #my $sth=$dbh->prepare("select * from marcrecorddone where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn or controlnumber=$q_controlnumber"); ! #$sth->execute; ! #my $donetext=''; ! #if ($sth->rows) { ! # $donetext="DONE"; ! #} ! $sth=$dbh->prepare("select * from biblioitems where isbn=$q_isbn or issn=$q_issn or lccn=$q_lccn"); ! $sth->execute; ! if ($sth->rows) { ! $donetext="DONE"; ! } ! ($author) && ($author="by $author"); ! if ($isbn) { ! print "$title$subtitle $author $donetext
    \n"; ! } elsif ($lccn) { ! print "$title$subtitle $author $donetext
    \n"; ! } elsif ($issn) { ! print "$title$subtitle $author
    $donetext\n"; ! } elsif ($controlnumber) { ! print "$title by $author
    $donetext\n"; ! } else { ! print "Error: Contact steve regarding $title by $author
    \n"; ! } ! } ! } print "

  • Select a Record to Import
    EOF my $id=$1; my $sth=$dbh->prepare("select servers from z3950queue where id=$id"); --- 514,542 ---- my $name; my $z3950=0; + my $recordsource; + + # File can be results of z3950 search or uploaded MARC data + + # if z3950 results if ($file=~/Z-(\d+)/) { + $recordsource=''; + } else { + my $sth=$dbh->prepare("select marc,name from uploadedmarc where id=$file"); + $sth->execute; + ($data, $name) = $sth->fetchrow; + $recordsource="from $name"; + } print << "EOF"; !
    !

    ! Select a New File !

    ! ! !
    ! Select a Record to Import $recordsource !
    EOF + if ($file=~/Z-(\d+)/) { my $id=$1; my $sth=$dbh->prepare("select servers from z3950queue where id=$id"); *************** *** 556,563 **** my @records=split(/$splitchar/, $data); $data=''; for ($i=$startrecord; $i<$startrecord+10; $i++) { $data.=$records[$i].$splitchar; } ! @records=parsemarcdata($data); my $counter=0; foreach $record (@records) { --- 610,619 ---- my @records=split(/$splitchar/, $data); $data=''; + my $i; + my $record; for ($i=$startrecord; $i<$startrecord+10; $i++) { $data.=$records[$i].$splitchar; } ! @records=parsemarcfileformat($data); my $counter=0; foreach $record (@records) { *************** *** 637,654 **** print "
    It took $elapsed seconds to process this page.\n"; } else { - my $sth=$dbh->prepare("select marc,name from uploadedmarc where id=$file"); - $sth->execute; - ($data, $name) = $sth->fetchrow; - print << "EOF"; -
    -

    - Select a New File -

    - - -
    Select a Record to Import
    from $name
    - EOF ! my @records=parsemarcdata($data); foreach $record (@records) { my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $notes, $controlnumber); --- 693,699 ---- print "
    It took $elapsed seconds to process this page.\n"; } else { ! my @records=parsemarcfileformat($data); ! $counter=$#records+1; foreach $record (@records) { my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $notes, $controlnumber); *************** *** 718,735 **** } print "
    \n"; ! } ! } else { ! ! SWITCH: ! { ! if ($menu eq 'z3950') { z3950menu($dbh,$input); last SWITCH; } ! if ($menu eq 'uploadmarc') { uploadmarc(); last SWITCH; } ! if ($menu eq 'manual') { manual(); last SWITCH; } ! mainmenu(); ! } ! ! } ! print endmenu(); ! print endpage(); --- 763,767 ---- } print "

    \n"; ! } # sub ListSearchResults *************** *** 931,937 **** } ! sub parsemarcdata { my $data=shift; my $splitchar=chr(29); my @records; my $record; --- 963,973 ---- } ! sub parsemarcfileformat { ! #use strict; my $data=shift; my $splitchar=chr(29); + my $splitchar2=chr(30); + my $splitchar3=chr(31); + my $debug=1; my @records; my $record; *************** *** 940,944 **** #print "

    Leader:$leader
    \n"; } # sub ListSearchResults sub z3950menu { --- 640,746 ---- my @records=parsemarcfileformat($data); foreach $record (@records) { ! ! &PrintResultRecordLink($record,''); ! ! } # foreach record ! } # if z3950 or marc upload print "\n"; } # sub ListSearchResults + sub PrintResultRecordLink { + my ($record,$resultsid)=@_; # input + + my $bib; # hash ref to named fields + my $searchfield, $searchvalue; + + + $bib=simplemarcfields($record); + + $sth=$dbh->prepare("select * + from biblioitems + where isbn=? or issn=? or lccn=? "); + $sth->execute($bib->{isbn},$bib->{issn},$bib->{lccn}); + if ($sth->rows) { + $donetext="DONE"; + } else { + $donetext=""; + } + ($bib->{author}) && ($bib->{author}="by $bib->{author}"); + + $searchfield=""; + foreach $fieldname ( "controlnumber", "lccn", "issn", "isbn") { + if ( defined $bib->{$fieldname} ) { + $searchfield=$fieldname; + $searchvalue=$bib->{$fieldname}; + } # if defined fieldname + } # foreach + + if ( $searchfield ) { + print "$bib->{title} by $bib->{author}" . + " $donetext
    \n"; + } else { + print "Error: Problem with $title by $bib->{author}
    \n"; + } # if searchfield + } # sub PrintResultRecordLink + + #------------------ + sub simplemarcfields { + # input + my ( + $record, # list ref + )=@_; + + # return + my $bib; # hash of named fields + + + my ( + $field, $value, + ); + foreach $field (@$record) { + if ($field->{'tag'} eq '001') { + $bib->{controlnumber}=$field->{'indicator'}; + } + if ($field->{'tag'} eq '010') { + $bib->{lccn}=$field->{'subfields'}->{'a'}; + $bib->{lccn}=~s/^\s*//; + ($bib->{lccn}) = (split(/\s+/, $bib->{lccn}))[0]; + } + if ($field->{'tag'} eq '015') { + $bib->{lccn}=$field->{'subfields'}->{'a'}; + $bib->{lccn}=~s/^\s*//; + $bib->{lccn}=~s/^C//; + ($bib->{lccn}) = (split(/\s+/, $bib->{lccn}))[0]; + } + if ($field->{'tag'} eq '020') { + $bib->{isbn}=$field->{'subfields'}->{'a'}; + ($bib->{isbn}=~/ARRAY/) && ($bib->{isbn}=$$bib->{isbn}[0]); + $bib->{isbn}=~s/[^\d]*//g; + } + if ($field->{'tag'} eq '022') { + $bib->{issn}=$field->{'subfields'}->{'a'}; + $bib->{issn}=~s/^\s*//; + ($bib->{issn}) = (split(/\s+/, $bib->{issn}))[0]; + } + if ($field->{'tag'} eq '100') { + $bib->{author}=$field->{'subfields'}->{'a'}; + } + if ($field->{'tag'} eq '245') { + $bib->{title}=$field->{'subfields'}->{'a'}; + $bib->{title}=~s/ \/$//; + $bib->{subtitle}=$field->{'subfields'}->{'b'}; + $bib->{subtitle}=~s/ \/$//; + } + } # foreach field + + return $bib; + + } # sub simplemarcfields sub z3950menu { *************** *** 782,786 **** $resultstatus, $statuscolor, $id, $term, $type, $done, $numrecords, $length, ! $startdate, $enddate, $servers ); --- 760,765 ---- $resultstatus, $statuscolor, $id, $term, $type, $done, $numrecords, $length, ! $startdate, $enddate, $servers, ! $record,$bib,$title, ); *************** *** 804,809 **** $term=~s/>/>/g; # See if query produced results ! $sti=$dbh->prepare("select id,server,startdate,enddate,numrecords from z3950results where queryid=?"); --- 783,789 ---- $term=~s/>/>/g; + $title=""; # See if query produced results ! $sti=$dbh->prepare("select id,server,startdate,enddate,numrecords,results from z3950results where queryid=?"); *************** *** 813,817 **** $realenddate=0; $totalrecords=0; ! while (my ($r_id,$r_server,$r_startdate,$r_enddate,$r_numrecords) = $sti->fetchrow) { if ($r_enddate==0) { --- 793,797 ---- $realenddate=0; $totalrecords=0; ! while (my ($r_id,$r_server,$r_startdate,$r_enddate,$r_numrecords,$r_marcdata) = $sti->fetchrow) { if ($r_enddate==0) { *************** *** 823,827 **** $realenddate=$r_enddate; } ! } $totalrecords+=$r_numrecords; --- 803,813 ---- $realenddate=$r_enddate; } ! # Snag any title from the results ! if ( ! $title ) { ! ($record)=parsemarcfileformat($r_marcdata); ! $bib=simplemarcfields($record); ! if ( $bib->{title} ) { $title=$bib->{title} }; ! } # if no title yet ! } # if finished $totalrecords+=$r_numrecords; *************** *** 851,855 **** "$type=$term" . "$resultstatus $totalrecords " . ! "($elapsedtime)
    \n"; } else { print "

  • --- 837,841 ---- "$type=$term" . "$resultstatus $totalrecords " . ! "($elapsedtime) $title
    \n"; } else { print "
  • From tipaul at users.sourceforge.net Tue Jun 4 09:56:59 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Tue, 04 Jun 2002 00:56:59 -0700 Subject: [Koha-cvs] CVS: koha/marc marcschema.sql,1.12,1.13 Message-ID: Update of /cvsroot/koha/koha/marc In directory usw-pr-cvs1:/tmp/cvs-serv25893/marc Modified Files: marcschema.sql Log Message: New and hopefully last version of the MARC-DB. Is the fastest in benchmark, everybody agree ;-) (Sergey, Steve and me, Paul) Index: marcschema.sql =================================================================== RCS file: /cvsroot/koha/koha/marc/marcschema.sql,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** marcschema.sql 31 May 2002 20:03:17 -0000 1.12 --- marcschema.sql 4 Jun 2002 07:56:56 -0000 1.13 *************** *** 2,5 **** --- 2,13 ---- # # $Log$ + # Revision 1.13 2002/06/04 07:56:56 tipaul + # New and hopefully last version of the MARC-DB. Is the fastest in benchmark, everybody agree ;-) (Sergey, Steve and me, Paul) + # + # Revision 1.13 2002/06/04 Paul + # should be the last version... remains only 2 tables : the main table and the subfield one. + # benchmark shows this structure is the fastest. I had to add indicator in the subfield table. should be in a tag_table, but as it's the + # only real information that should be in this table, it has been thrown to subfield table (not a normal form, but an optimized one...) + # # Revision 1.12 2002/05/31 20:03:17 tonnesen # removed another _sergey *************** *** 23,58 **** ) TYPE=MyISAM; - CREATE TABLE marc_tag_table ( - tagid bigint(20) unsigned NOT NULL auto_increment, # tag identifier - bibid bigint(20) NOT NULL default '0', # biblio identifier - tag char(3) NOT NULL default '', # tag number (eg 110) - tagorder tinyint(4) NOT NULL default '0', # display order of tag within a record - PRIMARY KEY (tagid), - KEY (bibid), - KEY (tag) - ); - CREATE TABLE marc_subfield_table ( ! subfieldid bigint(20) unsigned NOT NULL auto_increment, # subfield identifier ! tagid bigint(20), # tag identifier ! subfieldorder tinyint(4) NOT NULL default '0', # display order for subfields within a tag ! subfieldcode char(1) NOT NULL default '', # subfield code ! subfieldvalue varchar(255) default NULL, # the subfields value if not longer than 255 char ! valuebloblink bigint(20) default NULL, # the link to the blob, if value is longer than 255 char ! PRIMARY KEY (subfieldid), ! KEY (tagid) ); - # marc_blob_subfield containts subfields longer than 255 car. # They are linked to a marc_subfield_table record by bloblink ! CREATE TABLE marc_blob_tag ( blobidlink bigint(20) NOT NULL auto_increment, subfieldvalue longtext NOT NULL, PRIMARY KEY (blobidlink) ) TYPE=MyISAM; - - - # The next two tables are used for labelling the tags and subfields for --- 31,58 ---- ) TYPE=MyISAM; CREATE TABLE marc_subfield_table ( ! subfieldid bigint(20) unsigned NOT NULL auto_increment, # subfield identifier ! tagid bigint(20), # tag identifier ! indicator char(2) # tag indicator ! subfieldorder tinyint(4) NOT NULL default '0', # display order for subfields within a tag ! subfieldcode char(1) NOT NULL default '', # subfield code ! subfieldvalue varchar(255) default NULL, # the subfields value if not longer than 255 char ! valuebloblink bigint(20) default NULL, # the link to the blob, if value is longer than 255 char ! PRIMARY KEY (subfieldid), ! KEY tagid (tagid), ! KEY tag (tag), ! KEY bibid (bibid), ! KEY subfieldorder (subfieldorder), ! KEY subfieldcode (subfieldcode), ! KEY subfieldvalue (subfieldvalue) ); # marc_blob_subfield containts subfields longer than 255 car. # They are linked to a marc_subfield_table record by bloblink ! CREATE TABLE marc_blob_subfield ( blobidlink bigint(20) NOT NULL auto_increment, subfieldvalue longtext NOT NULL, PRIMARY KEY (blobidlink) ) TYPE=MyISAM; # The next two tables are used for labelling the tags and subfields for From tipaul at users.sourceforge.net Tue Jun 4 10:13:35 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Tue, 04 Jun 2002 01:13:35 -0700 Subject: [Koha-cvs] CVS: koha/marc marcschema.sql,1.13,1.14 Message-ID: Update of /cvsroot/koha/koha/marc In directory usw-pr-cvs1:/tmp/cvs-serv13636/marc Modified Files: marcschema.sql Log Message: ouuppsss... forget the 1.13 version, i made a mistake. This version works and should be the last Index: marcschema.sql =================================================================== RCS file: /cvsroot/koha/koha/marc/marcschema.sql,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** marcschema.sql 4 Jun 2002 07:56:56 -0000 1.13 --- marcschema.sql 4 Jun 2002 08:13:31 -0000 1.14 *************** *** 2,11 **** # # $Log$ ! # Revision 1.13 2002/06/04 07:56:56 tipaul # New and hopefully last version of the MARC-DB. Is the fastest in benchmark, everybody agree ;-) (Sergey, Steve and me, Paul) # # Revision 1.13 2002/06/04 Paul # should be the last version... remains only 2 tables : the main table and the subfield one. ! # benchmark shows this structure is the fastest. I had to add indicator in the subfield table. should be in a tag_table, but as it's the # only real information that should be in this table, it has been thrown to subfield table (not a normal form, but an optimized one...) # --- 2,14 ---- # # $Log$ ! # Revision 1.14 2002/06/04 08:13:31 tipaul ! # ouuppsss... forget the 1.13 version, i made a mistake. This version works and should be the last ! # ! # Revision 1.13/1.14 2002/06/04 07:56:56 tipaul # New and hopefully last version of the MARC-DB. Is the fastest in benchmark, everybody agree ;-) (Sergey, Steve and me, Paul) # # Revision 1.13 2002/06/04 Paul # should be the last version... remains only 2 tables : the main table and the subfield one. ! # benchmark shows this structure is the fastest. I had to add indicator in the subfield table. should be in a tag_table, but as it s the # only real information that should be in this table, it has been thrown to subfield table (not a normal form, but an optimized one...) # *************** *** 32,46 **** CREATE TABLE marc_subfield_table ( ! subfieldid bigint(20) unsigned NOT NULL auto_increment, # subfield identifier ! tagid bigint(20), # tag identifier ! indicator char(2) # tag indicator ! subfieldorder tinyint(4) NOT NULL default '0', # display order for subfields within a tag subfieldcode char(1) NOT NULL default '', # subfield code ! subfieldvalue varchar(255) default NULL, # the subfields value if not longer than 255 char valuebloblink bigint(20) default NULL, # the link to the blob, if value is longer than 255 char PRIMARY KEY (subfieldid), - KEY tagid (tagid), - KEY tag (tag), KEY bibid (bibid), KEY subfieldorder (subfieldorder), KEY subfieldcode (subfieldcode), --- 35,51 ---- CREATE TABLE marc_subfield_table ( ! subfieldid bigint(20) unsigned NOT NULL auto_increment,# subfield identifier ! bibid bigint(20) unsigned NOT NULL, # link to marc_biblio table ! tag char(3) NOT NULL, # tag number ! tagorder tinyint(4) NOT NULL default '1', # display order for tags within a biblio when a tag is repeated ! tag_indicator char(2) NOT NULL, # tag indicator subfieldcode char(1) NOT NULL default '', # subfield code ! subfieldorder tinyint(4) NOT NULL default '1', # display order for subfields within a tag when a subfield is repeated ! subfieldvalue varchar(255) default NULL, # the subfields value if not longer than 255 char valuebloblink bigint(20) default NULL, # the link to the blob, if value is longer than 255 char PRIMARY KEY (subfieldid), KEY bibid (bibid), + KEY tag (tag), + KEY tag_indicator (tag_indicator), KEY subfieldorder (subfieldorder), KEY subfieldcode (subfieldcode), From tipaul at users.sourceforge.net Tue Jun 4 18:08:49 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Tue, 04 Jun 2002 09:08:49 -0700 Subject: [Koha-cvs] CVS: koha/C4 test.pl,NONE,1.1 Catalogue.pm,1.15,1.16 Message-ID: Update of /cvsroot/koha/koha/C4 In directory usw-pr-cvs1:/tmp/cvs-serv25038/C4 Modified Files: Catalogue.pm Added Files: test.pl Log Message: test.pl, contains a script to test the Catalogue.pm stuff. Catalogue.pm : marc stuff : * the 3 xxxSubfield functions works * the addMarcBiblio function has been added : if you pass it a perlmarcstructure (sample in test.pl and explanation in marc/perlmarcstructure file), it adds a biblio to the marc_schema. The newbiblioitem (old koha-DB) still has to be updated to build the perlmarcstructure internally and call addMarcBiblio function. --- NEW FILE --- #!/usr/bin/perl use strict; require Exporter; use C4::Database; use C4::Catalogue; my $dbh=&C4Connect; $dbh->do("delete from marc_subfield_table"); $dbh->do("delete from marc_blob_subfield"); &addSubfield(1,'001','a','1 - This is a value',1); &addSubfield(1,'001','b','2 - This is another value',1); &addSubfield(1,'001','c',"3 - This is a value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff",1); &addSubfield(1,'001','d',"4 - This is another value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff",1); print "change 1\n"; &changeSubfield(1,"1new - this is a changed value"); print "change 2\n"; &changeSubfield(2,"2new - go from short to long subfield... uuuuuuuuuuuuuuuuuuuuuuuu yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy tttttttttttttttttttttttttttttttt rrrrrrrrrrrrrrrrrrrrrr eeeeeeeeeeeeeeeeeeeeeeeee zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq ssssssssssssssssssssssssss ddddddddddddddddddddddddddddddd fffffffffffffffffffffffff ggggggggggggggggggggggggg hhhhhhhhhhhhhhhhhhhhhhhhhh jjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkk"); print "change 3\n"; &changeSubfield(3,"3new - go from long to short subfield..."); print "change 4\n"; &changeSubfield(4,"4new - stay with blob subfield...uuuuuuuuuuuuuuuuuuuuuuuu yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy tttttttttttttttttttttttttttttttt rrrrrrrrrrrrrrrrrrrrrr eeeeeeeeeeeeeeeeeeeeeeeee zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq ssssssssssssssssssssssssss ddddddddddddddddddddddddddddddd fffffffffffffffffffffffff ggggggggggggggggggggggggg hhhhhhhhhhhhhhhhhhhhhhhhhh jjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkk"); my $x= &findSubfield(1,'001','a','',1); print "subfieldid : $x\n"; my $marcstru={}; $marcstru->{bibid}=58973; $marcstru->{tags}->{1}->{tag}='110'; $marcstru->{tags}->{1}->{tagorder}=1; $marcstru->{tags}->{1}->{subfields}->{1}->{mark}='a'; $marcstru->{tags}->{1}->{subfields}->{1}->{subfieldorder}=1; $marcstru->{tags}->{1}->{subfields}->{1}->{value}='this is a test'; $marcstru->{tags}->{1}->{subfields}->{2}->{mark}='b'; $marcstru->{tags}->{1}->{subfields}->{2}->{subfieldorder}=1; $marcstru->{tags}->{1}->{subfields}->{2}->{value}='this is another test'; $marcstru->{tags}->{2}->{tag}='220'; $marcstru->{tags}->{2}->{tagorder}=1; $marcstru->{tags}->{2}->{subfields}->{1}->{mark}='a'; $marcstru->{tags}->{2}->{subfields}->{1}->{subfieldorder}=1; $marcstru->{tags}->{2}->{subfields}->{1}->{value}='this is a test for 220'; $marcstru->{tags}->{2}->{subfields}->{2}->{mark}='b'; $marcstru->{tags}->{2}->{subfields}->{2}->{subfieldorder}=1; $marcstru->{tags}->{2}->{subfields}->{2}->{value}='this is another test for 220'; $marcstru->{tags}->{2}->{subfields}->{3}->{mark}='b'; $marcstru->{tags}->{2}->{subfields}->{3}->{subfieldorder}=2; $marcstru->{tags}->{2}->{subfields}->{3}->{value}='this is a third test for 220'; $marcstru->{tags}->{3}->{tag}='330'; $marcstru->{tags}->{3}->{tagorder}=1; $marcstru->{tags}->{3}->{subfields}->{1}->{mark}='a'; $marcstru->{tags}->{3}->{subfields}->{1}->{subfieldorder}=1; $marcstru->{tags}->{3}->{subfields}->{1}->{value}='this is a test for 330'; $marcstru->{tags}->{3}->{subfields}->{2}->{mark}='b'; $marcstru->{tags}->{3}->{subfields}->{2}->{subfieldorder}=1; $marcstru->{tags}->{3}->{subfields}->{2}->{value}='this is another test for 330'; $marcstru->{tags}->{3}->{subfields}->{3}->{mark}='b'; $marcstru->{tags}->{3}->{subfields}->{3}->{subfieldorder}=2; $marcstru->{tags}->{3}->{subfields}->{3}->{value}='this is a third test for 330'; &addMarcBiblio($marcstru); Index: Catalogue.pm =================================================================== RCS file: /cvsroot/koha/koha/C4/Catalogue.pm,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** Catalogue.pm 29 May 2002 22:47:20 -0000 1.15 --- Catalogue.pm 4 Jun 2002 16:08:47 -0000 1.16 *************** *** 21,25 **** @ISA = qw(Exporter); @EXPORT = qw(&newBiblio &newBiblioItem &newItem &updateBiblio &updateBiblioItem ! &updateItem &changeSubfield); %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], --- 21,38 ---- @ISA = qw(Exporter); @EXPORT = qw(&newBiblio &newBiblioItem &newItem &updateBiblio &updateBiblioItem ! &updateItem &changeSubfield &addSubfield &findSubfield ! &addMarcBiblio [...1566 lines suppressed...] + url = $website->{'url'} + where websitenumber = $website->{'websitenumber'}"; + + $dbh->do($query); + + $dbh->disconnect; + } # sub updatewebsite + + + sub deletewebsite { + my ($websitenumber) = @_; + my $dbh = C4Connect; + my $query = "Delete from websites where websitenumber = $websitenumber"; + + $dbh->do($query); + + $dbh->disconnect; + } # sub deletewebsite END { } # module clean-up code here (global destructor) From tipaul at users.sourceforge.net Wed Jun 5 13:28:13 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Wed, 05 Jun 2002 04:28:13 -0700 Subject: [Koha-cvs] CVS: koha-html/intranet-html/includes/templates/french/catalogue - New directory Message-ID: Update of /cvsroot/koha/koha-html/intranet-html/includes/templates/french/catalogue In directory usw-pr-cvs1:/tmp/cvs-serv25306/intranet-html/includes/templates/french/catalogue Log Message: Directory /cvsroot/koha/koha-html/intranet-html/includes/templates/french/catalogue added to the repository From tipaul at users.sourceforge.net Wed Jun 5 13:28:00 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Wed, 05 Jun 2002 04:28:00 -0700 Subject: [Koha-cvs] CVS: koha-html/intranet-html/includes/templates/french - New directory Message-ID: Update of /cvsroot/koha/koha-html/intranet-html/includes/templates/french In directory usw-pr-cvs1:/tmp/cvs-serv25203/intranet-html/includes/templates/french Log Message: Directory /cvsroot/koha/koha-html/intranet-html/includes/templates/french added to the repository From tipaul at users.sourceforge.net Wed Jun 5 14:46:34 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Wed, 05 Jun 2002 05:46:34 -0700 Subject: [Koha-cvs] CVS: koha-html/intranet-html/includes/templates/french/images - New directory Message-ID: Update of /cvsroot/koha/koha-html/intranet-html/includes/templates/french/images In directory usw-pr-cvs1:/tmp/cvs-serv20777/includes/templates/french/images Log Message: Directory /cvsroot/koha/koha-html/intranet-html/includes/templates/french/images added to the repository From tipaul at users.sourceforge.net Wed Jun 5 14:49:54 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Wed, 05 Jun 2002 05:49:54 -0700 Subject: [Koha-cvs] CVS: koha-html/intranet-html/includes/templates/french/images acq-acq.gif,NONE,1.1 acq-cat.gif,NONE,1.1 acq-crc.gif,NONE,1.1 acq-hom.gif,NONE,1.1 acq-mem.gif,NONE,1.1 acq-rep.gif,NONE,1.1 add-biblio.gif,NONE,1.1 add-child.gif,NONE,1.1 add-item.gif,NONE,1.1 add-order.gif,NONE,1.1 arrow-down-cat.gif,NONE,1.1 arrow-long-cat.gif,NONE,1.1 arrow-long-issues.gif,NONE,1.1 arrow-right-cat.gif,NONE,1.1 arrow-right-issues.gif,NONE,1.1 background-mem.gif,NONE,1.1 biblio.html,NONE,1.1 blackdot.gif,NONE,1.1 blankdot.gif,NONE,1.1 button-add-member.gif,NONE,1.1 button-add-variable.gif,NONE,1.1 button-issues.gif,NONE,1.1 button-next-borrower.gif,NONE,1.1 button-returns.gif,NONE,1.1 button-transfers.gif,NONE,1.1 cancel-mem.gif,NONE,1.1 cancel-requests.gif,NONE,1.1 cat-acq.gif,NONE,1.1 catalogue-spot-1.gif,NONE,1.1 catalogue-spot-2.gif,NONE,1.1 cat-cat.gif,NONE,1.1 cat-cat.jpg,NONE,1.1 cat-crc.gif,NONE,1.1 cat-hom.gif,NONE,1.1 cat-mem.gif,NONE,1.1 cat-rep.gif,NONE,1.1 clear-button.gif,NONE,1.1 confirm-mem.gif,NONE,1.1 continue.gif,NONE,1.1 crc-acq.gif,NONE,1.1 crc-cat.gif,NONE,1.1 crc-crc.gif,NONE,1.1 crc-hom.gif,NONE,1.1 crc-mem.gif,NONE,1.1 crc-rep.gif,NONE,1.1 create-man-credit.gif,NONE,1.1 create-man-invoice.gif,NONE,1.1 delete-mem.gif,NONE,1.1 front-acquisitions.gif,NONE,1.1 front-admin.gif,NONE,1.1 front-arrow-purple.gif,NONE,1.1 front-circulation.gif,NONE,1.1 front-member.gif,NONE,1.1 front-mouseover-acquisition.gif,NONE,1.1 front-mouseover-acquisitions.gif,NONE,1.1 front-mouseover-admin.gif,NONE,1.1 front-mouseover-circulation.gif,NONE,1.1 front-mouseover-member.gif,NONE,1.1 front-mouseover-reports.gif,NONE,1.1 front-mouseover-search.gif,NONE,1.1 front-reports.gif,NONE,1.1 front-search.gif,NONE,1.1 holder.gif,NONE,1.1 inside-koha-bottom.gif,NONE,1.1 inside-menu-catalogue.gif,NONE,1.1 inside-menu-members.gif,NONE,1.1 inside-top-join.gif,NONE,1.1 inside-top-member.gif,NONE,1.1 inside-top-search.gif,NONE,1.1 intranet-top menu.psd,NONE,1.1 issues-spot-1.gif,NONE,1.1 issues-spot-2.gif,NONE,1.1 koha-front-background.gif,NONE,1.1 koha-front.jpg,NONE,1.1 koha-front-koha.gif,NONE,1.1 mem-acq.gif,NONE,1.1 members-spot-1.gif,NONE,1.1 members-spot-2.gif,NONE,1.1 mem-cat.gif,NONE,1.1 mem-crc.gif,NONE,1.1 mem-hom.gif,NONE,1.1 mem-mem.gif,NONE,1.1 mem-rep.gif,NONE,1.1 menu-home.gif,NONE,1.1 menu-join.gif,NONE,1.1 menu-login.gif,NONE,1.1 menu-search.gif,NONE,1.1 modify-mem.gif,NONE,1.1 modify-requests.gif,NONE,1.1 mouseover-home.gif,NONE,1.1 mouseover-join.gif,NONE,1.1 mouseover-member.gif,NONE,1.1 mouseover-search.gif,NONE,1.1 new-basket.gif,NONE,1.1 new-basket-short.gif,NONE,1.1 new-supplier.gif,NONE,1.1 numbers-cat-1.gif,NONE,1.1 numbers-cat-2.gif,NONE,1.1 numbers-cat-3.gif,NONE,1.1 numbers-issues-1.gif,NONE,1.1 numbers-issues-2.gif,NONE,1.1 numbers-issues-3.gif,NONE,1.1 numbers-mem-1.gif,NONE,1.1 numbers-mem-2.gif,NONE,1.1 numbers-mem-3.gif,NONE,1.1 numbers-mem-4.gif,NONE,1.1 ok.gif,NONE,1.1 ok-start-search.gif,NONE,1.1 overdues.jpg,NONE,1.1 pay-fines.gif,NONE,1.1 place-request.gif,NONE,1.1 reading-record.gif,NONE,1.1 receive-order.gif,NONE,1.1 receive-order-short.gif,NONE,1.1 rep-acq.gif,NONE,1.1 rep-cat.gif,NONE,1.1 rep-crc.gif,NONE,1.1 rep-home.gif,NONE,1.1 rep-mem.gif,NONE,1.1 reports-mouseover.gif,NONE,1.1 reports-mouseover.psd,NONE,1.1 rep-rep.gif,NONE,1.1 requests.gif,NONE,1.1 save-basket.gif,NONE,1.1 save-changes.gif,NONE,1.1 search-button.gif,NONE,1.1 update-renewals.gif,NONE,1.1 view-account.gif,NONE,1.1 view-basket.gif,NONE,1.1 Message-ID: Update of /cvsroot/koha/koha-html/intranet-html/includes/templates/french/images In directory usw-pr-cvs1:/tmp/cvs-serv21318/includes/templates/french/images Added Files: acq-acq.gif acq-cat.gif acq-crc.gif acq-hom.gif acq-mem.gif acq-rep.gif add-biblio.gif add-child.gif add-item.gif add-order.gif arrow-down-cat.gif arrow-long-cat.gif arrow-long-issues.gif arrow-right-cat.gif arrow-right-issues.gif background-mem.gif biblio.html blackdot.gif blankdot.gif button-add-member.gif button-add-variable.gif button-issues.gif button-next-borrower.gif button-returns.gif button-transfers.gif cancel-mem.gif cancel-requests.gif cat-acq.gif catalogue-spot-1.gif catalogue-spot-2.gif cat-cat.gif cat-cat.jpg cat-crc.gif cat-hom.gif cat-mem.gif cat-rep.gif clear-button.gif confirm-mem.gif continue.gif crc-acq.gif crc-cat.gif crc-crc.gif crc-hom.gif crc-mem.gif crc-rep.gif create-man-credit.gif create-man-invoice.gif delete-mem.gif front-acquisitions.gif front-admin.gif front-arrow-purple.gif front-circulation.gif front-member.gif front-mouseover-acquisition.gif front-mouseover-acquisitions.gif front-mouseover-admin.gif front-mouseover-circulation.gif front-mouseover-member.gif front-mouseover-reports.gif front-mouseover-search.gif front-reports.gif front-search.gif holder.gif inside-koha-bottom.gif inside-menu-catalogue.gif inside-menu-members.gif inside-top-join.gif inside-top-member.gif inside-top-search.gif intranet-top menu.psd issues-spot-1.gif issues-spot-2.gif koha-front-background.gif koha-front.jpg koha-front-koha.gif mem-acq.gif members-spot-1.gif members-spot-2.gif mem-cat.gif mem-crc.gif mem-hom.gif mem-mem.gif mem-rep.gif menu-home.gif menu-join.gif menu-login.gif menu-search.gif modify-mem.gif modify-requests.gif mouseover-home.gif mouseover-join.gif mouseover-member.gif mouseover-search.gif new-basket.gif new-basket-short.gif new-supplier.gif numbers-cat-1.gif numbers-cat-2.gif numbers-cat-3.gif numbers-issues-1.gif numbers-issues-2.gif numbers-issues-3.gif numbers-mem-1.gif numbers-mem-2.gif numbers-mem-3.gif numbers-mem-4.gif ok.gif ok-start-search.gif overdues.jpg pay-fines.gif place-request.gif reading-record.gif receive-order.gif receive-order-short.gif rep-acq.gif rep-cat.gif rep-crc.gif rep-home.gif rep-mem.gif reports-mouseover.gif reports-mouseover.psd rep-rep.gif requests.gif save-basket.gif save-changes.gif search-button.gif update-renewals.gif view-account.gif view-basket.gif Log Message: copy of the original gif files for french template. Will be changed in the future --- NEW FILE --- GIF89aÊ ÀÀÀæ¸ êóC‡…˜À ް×cɑ曷ó0bnÄHÁ  ˆ*RÀˆáa«é¯a§P6jÕ¶#¾>]FŠ…;J*19œIñ7pˆ.S—á_.íX®Üä‘çÊ—$ñ‚©¤˜.Ê/) ­$IôK%oðà.&‰’˜vŸÏ|Éô >| 3/üðÄoüñÈ'< 4eQÍ!Zƒa6ÔWoýõÖ?À@õ , ÁPнÿ^L@øâ/@ýPÀÀæcàýûœ>ûd+fÁ X`Á×õÞ :À À]0h ¢‘DP¾Y` è.@äíò€v0…'˜ð„(||‡ƒŠa/|‚b QPŽR˜ÂÁM4ALP¹x€r!X Xˆ¦pÅ%¬æN+& [øÂΰ†7Ìa 'a YlQ|¦,”÷ÐVÌâ»øÅ0ޱŒ]Ü\Àe ^Ö;fV³ W²‡Lä"ùÈH²ÏØ“cAìø_¢¡”§Lå*[ùÊXÎò•¥&â&‹×ÉBÇöÐIæ2›¹œPÈ%8Ð@}ºùÍpŽs=Y€”.1¡xγž z…%ôî&ਠMèB_4jà /ûØÐ¶°®©¸8ŨqfÌíw`ÛÝ÷<À§"  Ñ׫v³ûÝè~7 dÙÝø–÷l€v€;GÀA–w=e‚kùàO¸”c Ø#<¯FˆÎÜMö‰S`€÷ãM d|Ç@ø×M½|oÝ|ßÈEnò‘sM/"/3Ę@,hó]ÐÀ`(PAè,%X <ÈÔ. 7è‚?±~Íÿä\¡ÊÑ(ºt€¨hN+‚§?¢ XüåK ¿Ê?€ó ãÕ8‚ÕZ£ ¨‰Æ0€ÌŸ´{*]€ Ðø ÷ˆS6Ù Gq–x‰˜Xf@©Çô”tŠø$Š¢g ¡w{–Šª¸Š{æPO°0Êq§7‹´XhƒäFж|º¸‹; håŒÂxiÁ³(Gðe…TŽ |ÕŒÎøŒ—ÀB á…Œ> ŒYÀŒÐ¸Ï8Óh uTبÿÜXŽ›õÕhã¸Væ¸ÞHáØã(bíXŽïŽÖxŒôXñ˜Ö w i°ðµæ©(–, `'¹’'‰’6%7°‰1™ ™¹Y]0a¦)6”Ã1”Ìaƒ6øaKG03ÿr“8Y;y  ضbZ™•ú±•^é•Y©mP“C É5™˜‰€j q `Їp™IÑ ÚiâÕ,è2w‘vq‘Y0:£/Z£2jÿ£1š£4š‰Ö£1(@Ú³áDZ¤B.s¡)LÚ¤N)K„'€¨R¥Vz¥Xjc4#¶Ò¥^ú¥²r—ðX%‹‰˜Æ’¦jz¦‹y¦U¢¼9™ì`Ïò À~í—§zº§ðå 0` €ƒD}D‰a”R}¤¯ª%°ª°+°$àZ›¯˰ûQƒÒúœ” 0{޶µ7 ¢;•K¸¤Ì$WÞ™}Ûås…SrE¢:Å !”)Zóœaî‹ðk†Qõð }„A(ÐÆvƒbPmPhm"…Pè„Qn_ nn¼mnŒ…]x©0¶5#‡%¢‡ð&‡qhª.†dø†?FÓ4ýc3Boð†¥šo>M --- NEW FILE --- GIF89aÊ s©KŽW°@¸P!Ç#6œ‘¢ÄŠæè2° “%MBŠI²¤É“(S’\„£/^âuA³¦Í›8sêÜÉgˆ1-  ¨Ñ£H“*]Ê´iR\^ê‘ãÆŒX³jÝʵ«×¯`µÎظ­ˆj@ŠˆYàÀ^„zoÿ%Ä+Aù *¦ƒÞxoûFh€“ƒ¿4p ؘ¶ ‹¹ ·²\ˈéáBÅ 9d T!£ôÁÒ¨K?P±"µè¤M#DÝ!vé.6\’wß=0Û%¦.¼%÷ žƒx$È›3QòÓG11-Á¾„ºõ%]¸ø¸¤d‰ L=|«/Îd9‡ðE| <ÐmÖYgdbÄl|ö¹çŸ£ê§ ¬5§CyÅ%ªè¢Œ.Ú\£F*餒&¡„}¨é¦ðÈé§ †*ª¨ €PXŒ9¦ªêª¬¶êjŽ`@a9dië­¸æªë®¼féc:ˆqV8 at 8’&¥Ê±ŽwÌãûøÇ=þ $/¨ž÷Ìç>ûór¬ÑBúÐmI"—tù#>r—uy—\&—6’=À“%I•óx îÐf— óðˆø-ÿ‡ÿÛs…)ð,p‰–¹g,°Ù“UéË12 剤 >txœ‰‘y˜:7y§øšu7›Y’é™’¹ºçŠºS  ™š‘š…`›‡i$,€‹ÆIT, *<ð EOÀCT”®z«© 2€)ðG‡4Gl¬@s„HÅú«‰t¬y4G¾µH# ¬Ïú«ÐJ@\€_”J·´­Üª­ÛÊ AÐfl1g  .aOÑ×b°`X* á…àT[hI´ --- NEW FILE --- GIF89aÊ íI —$(À´©Ó§P£JJ*Z±±Çޝ`ÊK¶¬Ù³bmÌ̤Ä4"Jÿİè0¯ Ý»x9€ˆw÷B… ft €a˜B` *p¨ðx¯^Ã%;€oÞÏŽ®¸á"ÆŒ _¸8úÅÓ¯a»p {ÃÕ§SÇF=#¶ „@¢LqB¼xq ?¤ˆB\9H'P‚\"Ɖrâ?¶LQ¥I LQœˆIŽIü'Oz€wò£‡t1O¬cb¼þ”(ÔWŒ Á_Äþþ8õ'‚$ˆ ¦ª*ª¶êª‚ˆñEJÖjë­¸æªë®¼öš+¢ mkì±È&«ì²Åêà‚tn}C„#K`2Á Œés϶Üvëí·X `Òƒ,DŒ2­Õ^Rà 3ĀѼ0Ôko½9¤/¾õÊp/¿ó¾`Ú ß]²ºê:òž=$'ÒK»dÒ1IÑÿ&‘nÂìb "t0ÔÈ$ëÔ+„€1‰¬»0 7°Â P¸ˆ¡ Ê)r´C+DA Wª )Tá?Ð}(„. b°Â‚8Ä^ ʹ‚ã¦pêˆÀ8AAp9€`˜óâP€‚¤ N Yȧ>÷ÉÏ~úóŸ  aÿ“VOz `¨1° 1À«êàé¶p4LøÀ !¼Á„` ƒ]ÕYÕê\¹*†Õ@f<8`‚ 8ô—óÀ Rà'”­µ­o…l:äJ×¶†Á $`€ ö±‘}KOËÕŠ»‚52 +Kû%´ª•­­HmruZ v\S ׊ ÆKÞòš÷¼èM¯zÍKr]£-ƒðî%z°¸à¾øÍ¯~÷Ëßþúw¿Š}à+v¼ç\Ýa‚‚Ìà;øÁŽpÿƒ›…Žá”ÀVÂw?æŸxøÃ ±ˆGLâ‹e*»p´ | ˜ &Jç:ÛùÎ=AG$€€ÝŽôÏ€ôG?É¢ØR¦ˆN´¢ƒŽ !Z·ØxA°^ö"€1 ÕbÁAÿÌ ”™øÙ"Öϳ ܈Å9cÑdôS êÞÿ¶" ![Œ!|‡aðá8ÿŽâøâX¥%s B ýF Øha—, ~ý¥4p_ªq_ù¸(úõ%7 _` š Š šj)Y¥R¡i¡z¡š¡º¡:¡Ä¨úñ*&z¢(š¢)!Ì¥¾ò¢0£JÂmàÅ…Ìrÿ£8š£É¢“5ߟàÕ|Ã7¤DZ¤ç•iå2¨æjLÚ¤NÊ~êRàÆV¥Vz¥öR ! ‚Ðö¥`¦¢2_à °—<õÀ¯ 6kTXqü/Ÿ 4ðrd±ü£@$7VþòN‹±]-]1'À ·ž÷!Ýy·ž§yr‹Q€Ë·#•  U€S°?`K ¥#F)ØqÊõ É!Rð=ä7 &ïl¶˾ÌH$½‚ÅæB!0ƒ6ƒ(ó 4èòaúÍ# m-2G!hÚ#:øbJèÿmBxnbPcThnÝ$>Æ D at eo8‡( Ü”°Ú´>ùªÝß4Ûd°)`¯ ëMÞ-p±Âo ²&O‚(ˆ%À‡DO0p…ˆˆXàW.»œS—ù PAÛO5ËOPù}œEÕ,P¬EGlg9¾Ú«QO«E'p’X‰×¸ µáu[áé„‹·u·"î™$@Љ&¹‹æâš SwˆÁ\³Á{ãÂ{㦋ôÐãáã<Îpaü@;ä9Ža ñú00P.åQwÈÔã›å³å%Ñå¬å$a1\ÎåYæeNæâkæìå\ÃÁNK>Q#P2@!:I\z¾ç|Þç~0LÃY1PSè†~èc%b2J`”ȧÇé’¾^±ÒOzéú¥ºŒ¥œÞéžÎéH”Ìb:ê †ákzꨞêhú!B ЮþêGV)B --- NEW FILE --- GIF89aÊ DB0/€z=ÀÀÀà³ ô÷øùúûüýþÿô,øKL&L¬H¸P!Ç#6œ‘¢ÄŠ#º¨p)Ì% Q Héd¤É“(Sª\ɲåH(Q€\òâåR… rêÜɳ§ÏŸ@ƒúÜÀS (]Ê´©Ó§P£JMÊ4 r¼¾”(Ö+tØïAÆtÀÁûq`àH û h 8ØÀ‚þy° È_ƒÈaƒlp `ë­¸æªë®».‡C–_+¬—4ØPì°È&Kd±ÌB)Æ[áq„I`ò•Ùó϶ÜÖc_Ìz ZQæ!ÒRkm´-´Â )¼ëî»É;ï½ö΋ ¼€ÉåžkHºê‰ñƒr!Iqq.5ŒRI/E¡Öÿ|JÿºÕ^2B, ðøìO>ýL° NAH U¸Â²pÏ,(¶ ‡µa Ä»b"¯KðêW‡Z\€¬‚± [øÂΰ†-Ü„(,ᯠÖï~ÏK‚m (N±ŠWÌâ»øÅ,V™¸B,ˆû ,ÀXøÆ-à¸Y@ÁT.W¤³2)HP0sÐ<57a:° æzÖ`Š ÈD<à N:©bÂ~R'"¸…,Iõ0TŽ@ˆî% B²‹œ /§ÃçlL`C NÐÔý·)ÝãSOÀSÄåñÁÖk±¸¤"KaNÀaÖ¡à6nàÆ$xb² )†‚$ˆb'È‚@‚%(n06"%‚ÿ"7Ò"8Æ#pn<ò"<¸#:vn?¸c É)*LðO K ) : š º 0 . )É¡:¡Z¡j¡Ç¡g$Pò* ¢"*¢*s P#¼’¢*º¢,š¢4RŽÊÁ”Æ¢,4Z£Frÿ,Ç’œt9”‰pÕòÖ—|B:¤Dº^à/ËD~Jº¤L*`0à/I ‚ÒV¥Vz¥6‘3bƒ^ú¥_úm³’ï¦n;v#fš¦ê @~šBÔ@tB.`B‘z© 4s˜º© „EBX“I$S`9•ƒD‘ƒET¤Êª¨ 9¤Jª~)ñoÄHs$QG «s¬ ¬Äj:ŽT¬Ç Iƒ$ÐIåIPJÙ™""U 6ôz06òÊ àrm&•ª)  «-€Vé¤Vpu»›)‡Vl•N‹NËBè„V ä°Áþ´M‡O’…²÷„œˆ5Cõ²2kK‡œ_wO‡U 8C‡ÕX8Dœˆ³ø$1B°tý„b ÀPд~'w £¥PõF £V;H‡µ"0Z‹·˜Àز;¶sàyk‹;·ã¶n›yÃÓI•7JjÛQm;< hLJ°…>ðTò4 oê$íAETM<ÆNLÆML$Bð{*4œöEj¤«¶^À5qÌ7\¦†|Ë7\ë}Çw¬jÙG@€lj 0"@Фðg®q~·Öô×~¶f~õw~³áŽ»ÖÈ@à/Z`lxy LðQPa(b@ʆ@`ʨ¡£øÉ:ôÊÁökálÅæÝs*xb߯Á0Hƒþq‚ nßv̱bÌ.Ø¥`ºbñì–n8ÒcìF --- NEW FILE --- GIF89aÊ $2«|ezSyW 0:&Sh7³ÈŒÕꬵę­¸™ÊÖ³åò̻Ƨ¨ÓQµÚk½ÞzÇ㤲†ßî¿!EBÀÀÀæ¸ 2ÈœI³¦Í›8sê´IA ¦J´¨Ñ£H“*=Àç%.dð˜JµªÕ«X³jÝZuÇ*Å|Q‚¤š%bL × ­Û·pÿ)¬mû ­‚xà]°önÞ¶r㥠 _ æñmà`Aa Äü08ñ`e—/‹Y!¦E +Vt¡âÒ’/ý(-Æê—TL$mú`ê10ý˜ˆ™wfß•)þˆ5DÊ"—¸ˆ‘Re¹”!Å›S‰)b†4¿„½8uëÏÁ …9&.RÒ«Wo…Šò2`À`áÂ|ú0å[ØÓ…ýÜ`}ô h\ 0 € Q /`ò„µØ&¢­±b€¡]FudÒ¾#¡TÅÕ]ò̋ ²L“M0LSÃ5AŒD«ÿÀðfKlÀeF°€‰E!°ÔÈH °@ï!ÚrüB-° W<Ìp•Í4O% - q±*·Ã2°€SÅ„ªÞ4§ÊÐê´bñ˜ypÀå©OÌ1† p€r—ËÜæ:÷¹Ð®r“ë ‚»— M0VÜû^â+õ•‚Ìà;øÁvpÿÅ.6à`Á·^C €/νˢ˗=ZyA ÒKÞK¼ ¼—X£Í»¶I[úÒ1h×¢Ð_þVa ûÕ†À…úŠºÓ¨¾o~• 0x? âO„gÍ`øÐúÖ¢²@¬œ@#`Ä"Öˆc$€W ‘/ˆB¶% Kà Z0ž-! «Ðý°8¡øâ›OA÷߃±€óUK¯?ô wƒ 3˜Á ^€¾@tÁ D2À‡Ѐ `ˆ@Ö`€5Pà pPÁzðƒ  ^@¸À3[ 8@€˜ÕàŽ ¸ã 0Lا8ÿˆ` À¶v³„2¨A f  wýA RpÙÊž€%(@p0¤õ©QU†[“À´¸§™y ,†ùÞ€HN²’—Ìä&;ùÉMVX€lÝ!Ëå3Sƒ¦–·ÌåfZàvü™9ÇLæ2›Ù›/ ë0D¢€.Ó|Ê” K-Ážù)†x'À'ÖEúÜó XA ݆/  ÜH€]˜px™©™Ü©O˜ ñàq§YžƒÖ>[!ž 20›î©hÊ)œ¬ÙVyÙšŽg’Ÿî¨ŸøÙŸh²Ÿ v¥‰¥Zš¥\Š‘‹²¥W:a?¤"P‚=x¦hš¦ râSH„p§r:§tZ§vZ§5dE†oا~ªoRš|Épr ?àã±§ ×<íÓSÇS÷ÚqPLìã¯ÿJ5piBU5Å´¯[ö q ±!€Krùgû$öW_©÷7€ÜPz_5A¶vBÀ`èìšìÉbÀÉ N€¾¶É§Ük¨ì™BȃiJbͦ"0bLU‰Ç¦ ƒ(mÑvlÀ,b?èa³\bJᦠ„,‚…AnÙ–„yºÌNˆmÒìÌ×ÌÌKˆÍîÖn6ÿ àÏTc?¢» `H`z–tH0؃qÿ3:’zƒý F0‚—{L K° «¯p¹L·]û a!á*®+.þâ!aq|8нDMÕ“ã,ñ `>þãBqx@>äDþîÑJ! --- NEW FILE --- GIF89a»  GY%9G®×]v‘BµÚl‹§T¸Üq¿ß€Âá…¤ºy½ÖŒ™Ì3¡ÐC¡ÐD( ¢ÑE”¿?„ª8,8¤ÒI£ÑH¤ÑI¥ÒL¦ÓM§ÓO£ÎM¨ÔQ«ÕV¬ÕY–ºN°×a ÃY[n3³Ùf´ÙiªÌe·Ûo¹Üs»Ýv½Þz  Åâ‹ÆâºÔ„ÇãÈã‘’¥j±ÇCL1Åß‘Êä•mzR0:$*6=& ÿÿÿ¸¸¸,,, GÊœ9Ó‰ ºD‚Ñ£H“âqt€Ž¤0‘R0)!êÑ© $=JUÂR£V­ÅeÀhW§%»U¸V0ûôhÉfçæ­úcÒ?ʶL¸°[%+^¬X€ÆŠ§P<æXWN‚Ù$dÅžOHB0çuV¬õçNXÚ$®$“AWЭÙô›¯ƒ ¾„‚ƒãÈ“+_μ¹óçУKŸN½ºõëϧþèñ¯Â ŠO¾¼ùóæ3h@Ͼ½û÷ðãËŸïž…0û%¡o‹ý(à€lаÄ&¨à‚ 6èàƒzà„Vhá…f¨á†.Ñÿ‡ †(â‡àâˆ#&‚b" ,€¢6ˆ Š4Öh#!"62ˆ10ða5âøa6iä‘-,Â’L6édü Bæ$—Âm7„€¥ZrY@O†ðC—K1yÃKŠ ƒ#„ `qni%•IÔif—OžÙ$€i¹¤Ÿffi§ ›bJªw)‰ªOØ€)/ 8R¥µâªª9¤(¯À–l­½®Ši•²îªì²ÌÖªÄÐF+m´UŽ0-´8¬mID é pëí™$”pígN[ÿeЖ„ƒ ÐV)€´¸0@»?¬0ï¹è‚­ ¸¬ ‚¢„ ‚žù$ˆ AK'8ˉLjZóÕäP†Tx†'šÁaˆD5~á }Ú€Ÿ9Xƒ1°-.£‘ --- NEW FILE --- GIF89ax ƒ¨; 9G®×]µÚl‘¯W¸Üq¿ß€³ÑxÂá…½ÖŒp}W™Ì3¡ÐC¡ÐD¢ÑE’¼>,8¤ÒI£ÑHšÅD¤ÑI ¥ÒL¦ÓM§ÓO£ÎM¨ÔQt’8«ÕV¬ÕYGW'°×aœ¿V\p3³Ùf´Ùi·Ûo¹Üs»Ýv½Þz$*  Åâ‹ÆâºÔ„Çã¢gÈã‘£¸vÅß‘°ÆÊä•0:5<$:A*ÿÿÿ¸¸¸--- *ÀB vHÿ!‚¢ Háˆ9HXb‡(ЍÄ,¶èb‹à•ð"‹¶(O-²€Þ7戞 'Ìx a–iæ™hz¹„ l¶éæ›pÆ)çœl¢ +Q`}(à ÅKx2àyIh ßvŠz7ñ?° £%ð7àí)¡ñÈöq²Frx!€^ãJ!~èìÏmÌBFÐz"í-ƒøÜК´Fl:ü sÆÁÕº]\½É¦5u_‹òœrW]rOǶBêÈãDê ”@r£c>ëð3<"°7Aê dwAÕ 8Ûìh–|FžœñCgòà‚䔣WÚgdAž‘ùfèuFÎ --- NEW FILE --- GIF89ax "H¡Š$ÿ…âPሖh¢†J  âŠ,®¨ -ªÈB +âsÀŠìŒ€€8ŽGB 1"0ÞŠ#üP#€'¨˜+Ù¤ŽO)å”K¤`å•Xf©å–\vi%(x)æ•`Žiæ™V.¡Âšl¶éæ›pÆ)çš($0çlÖ‰çž|®¹Äô)¨ zúf¡†j@‘? ÃÎ3F*i¤xðÀ)94°Ù¦œvFEš€„h–Šf™¦j‰jª¬¦ ?„%무Öjë­¸âºÄ”¼öêk‹?þÚk°ÂÛ+0nÜ`  Ì IÍ>›‡´žnzà‰%JÀƒØ"HH‰„\X↣`+n·è¦ ÿ¡4ÍÄÁTÓîBøÄR½É$ÒF&Í”ï¼ ZÐAB --- NEW FILE --- GIF89a» ¦¿€œÀ^¦iÄÞ˜o}W¦ÓN;K‘¸F‚¡E¸Ür¿ß€»Ö‰™Ì3¡ÐD !)®Ö]g~7Td4ÆâÆà‘7>(Êä• ,5 ŒŽ‰ŽŠŠoe '"{'že ¢t"I\I~¤€°±t‚d ·ˆŠ¿‰À¾ÂˆÀ¿rc§b ­b¡dÓÓcÖeØ£'aÚÚ#Ö' ååÜÞ¥²ìÒJw ò¹¿Ç–»öÇÇíc Ñ4äpà€w.80诡; –l° YòâÏ C‹&»Ø.¶sÛ#&à0ŇI8<á„„²‰Ëâ œ›énБóý›÷±aÄ'`ÿf|B8bŠ‹žNú ²kßžá¬^öðõß ûöóèÓ«_Ͼ½û÷ðãËŸO! ‚S:P°É¿¿ÿÿ „(£ˆ3†¨R4æˆãŽ:öÈã> äBâ&©¤’ à”!¦Æ‹[Übˆ,™¤”¥–Z*Ä Zð‚Ì 'HšÏ4`HÄ¡'DHbn1„õ>™âˆ¦>DZ EC™$À9Õ™aøv¸½:ªgH ÷ôV¢,³D…ƒ… †’‚b¥p²Œ¹ˆ8IÔ¨&˜-zñ‹_¤ßþnAÄ ±JHÀ0æâ _PèÓØ€èà 3}`kò£…4â ÀŠZ€$`¨.V´°h¡4Ú(DqJSvâ(G3ŠÑŒ>aS#£J%%Æ:àBUÿÝ$F(‰¯_,c èÐ_b|€žð)PéàÇ9\€ÒX‡P¯!Š[b–ÌÆ;æð€—ªMˆmTW¡Œ9lbŽe(Á wŠy"v¥0ë@A10LZÅ ÖÄ®‰ÅOÕÕ;Ds%–šZVµ6xÁë 0‡¾ñê«r—;‡)!’ð¸ª\Öv --- NEW FILE --- GIF89a --- NEW FILE --- GIF89aš@ «æK[‹5k›«‹„»ëû;xN^n~ŽžÞ «Þîþ/Oî]?ŒiŸŸ,ªßÿ]í/ @dÝdUð ÂR :\Ôð¡DA'ZÜSñ¢F:7z\Óñ£H1!GšÌRò¤J()WºLÒò¥L"1gÚäQó¦N9wú|Ñóg˜GÏ‚ ý⥙ѣ(ù[ÊôJ%`P£öÁ—«ªÕ'ëbÍû 6¬Ø±å’=‹6­Z²«Öº} 7tOhª‹×îÔ¼|Q8ê X¯ÖÀy>Œ8±âÅÊ --- NEW FILE --- GIF89aš@ «æK[‹5k›«‹„»ëû;xN^n~ŽžÞ «Þîþ/Oî]?ŒiŸŸ,ªßÿ]í/ @dÝdUð ÂR :\Ôð¡DA'ZÜSñ¢F:7z\Óñ£H1!GšÌRò¤J()WºLÒò¥L"1gÚäQó¦N9wú|Ñóg˜GÏ‚ ý⥙ѣ(ù[ÊôJ%`P£öÁ—«ªÕ'ëbÍû 6¬Ø±å’=‹6­Z²«Öº} 7tOhª‹×îÔ¼|Q8ê X¯ÖÀy>Œ8±âÅÊ --- NEW FILE --- GIF89a --- NEW FILE --- GIF89a --- NEW FILE --- GIF89a --- NEW FILE ---
    You're fab, Rachel (Andrews, Kate)

    BIBLIO RECORD

    Biblio Number:
    Author:
    Title:
    Subtitle:
    Unititle:
    Notes:
    Serial:
    Seriestitle:
    Subject:
    Total Number of Items:

    NEW REQUEST
    Rank Member Date Request Pickup
    1/01/00

    MANAGE REQUESTS
    Rachey Hamilton-Williams 1/2/00
    Tod Jones 1/2/00
    Freida Daggeral 1/2/00
    BIBLIO ITEM - Large Print

    Biblio Item Number:
    Volume:
    Number:
    Classification:
    Itemtype:
    ISBN:
    ISSN:
    Dewey:
    Subclass:
    Publication Year:
    Number of Items:
    BIBLIO ITEM - Adult Fiction

    Biblio Item Number:
    Volume:
    Number:
    Classification:
    Itemtype:
    ISBN:
    ISSN:
    Dewey:
    Subclass:
    Publication Year:
    Number of Items:

    ITEMS
    Barcode Location Due Borrower Cost Request
    LO1216184 Levin 1/2/00 Blake, Rosalie $16.95

    --- NEW FILE --- GIF87a --- NEW FILE --- GIF89a --- NEW FILE --- GIF89a» “»DEW"®×]¡ÅZµÚl¸Üq¿ß€Âá…½ÖŒ™Ì3¡ÐC¡ÐD( ¢ÑE„ª8¤ÒI£ÑHšÅD¤ÑI¥ÒL¦ÓMw—7§ÓO£ÎM¨ÔQ.9«ÕV¬ÕY_u3:G°×a³ÙfŒ©Q´Ùi$+ªÌe·Ûo¹Üs»Ýv½Þz  LW5Åâ‹ÆâºÔ„ÇãÈã‘£ho}Q7>(Åß‘Ê䕱ǂ¥ºz5<% ÀÀÀ¸¸¸,,, HÐF’!Z*\Ȱ¡Ã‡I|xññãÆ‹3jÜȱ£Ç 2|I²¤É“(Sªä¸Žâ 0cÊœ@Eš81üàsç„ÿ 8“` Éá%ΣH‘*9ªcgÒ§G“@ u „«X³j]÷+Z‹f°‚X¬d98Њµ,®WϞźÃU·_A jÁ%ü Q5DG 0hèÿᇠÂQÔhâ‰(¦¨âŠ,–ØA-Æ(ãŒ4Öhã8®¸„ <öèã<6²Î @9HE©€E*1Ã9üPä”TVùC” WVéå”I|)æ—K„`æ™h¦?˜¥i * ¼)È{è<äKÔ«ý € ý¯G‚{$³ö²Û+µß§¯¾28;±»êÇ_­üô×kÕf›= Ãm]á•Nð R!¨ 9 ‰f --- NEW FILE --- GIF89a» ¨ÔQ»Ýv¬ÕY¡ÐC¤ÒI¢ÑE¿ß€°×a™Ì3Q[<½ÕŠ¯Ç€¸¸¸‡˜cCL2–¹N~œAmƒAÅß‘£ÎM$ ©ËeKa–Â?–°`ÿÿÿ!ù U¢¢¨Ñ£HN@¢ ©Ó6œª€àFê†R)X˜ µ«Š6^B•J5BسhÓªU¢­Û·pÝ hä!®]R ì²XÐHo >âÖ  ·p[  ¿Å«—obÅ#K–¬Ä›å˘/ØR"³ç—ž È,Z¦€Ì9O‡^Íú³ ªŠçwˆ­»@€ ý¸ôÜÚ¹ï^®¹…¼;ÿξ½û÷+TvÊùèÃÍI0HY(¡á'$ % QÀ 3Yò‚-IRB f/_¦2ËÞÄl™i¢É6×ôÜsªÙ&ôÐ'1YNMpàV_oÍ•—Óp1]X \_·¥u%t]@[a»åØ^¥°0—M&÷ÜK'¡Ô ·ÞWUÕQôF8RwÅVK‰`ÔG„ 6œ‚Âõ:ˆßö‡’Šd éÚbf„jð…À RÜ€;ð^’Rd  ¾À 1°¥·¡køò—À ¦0‡IÌa(ÈL¦2—ÉÌf:S¨Ü¥4§IMp%¡Øì²ÉÍnzó›ßT ÆIÎršóœèL§:ÇÙŒuºóðŒ§<çIÏz¦3Õ”„7òÉÏ~’ÀIh€ JЂô M¨BÊІ:ô¡¨D'ºPá$¡vüܧ?7*Ç·U¨ö i:Û)Ò’šô¤(g>$0ä(+àÄæ6cJÓšÚt‡À€K×€†žúô§@ ªº õ¨HMªR—À! --- NEW FILE --- GIF89ac #+§ÓO¨ÔQ¹Üs»Ýv¤ÒI¬ÕYµÚl¡ÐC¢ÑE¿ß€Æâ°×a™Ì3¸¸¸½Õ‹‚ŸJ©Ëe! –Â?Åß‘£ÎM¯Æ—Ã@/9p5™ºT¹Ó„Ka­QRd.œ´l¬ÄzmƒAwEÿÿÿ!ù øH° ÁƒTb¢¡Ã‡ç€H±¢Å‹3j¼¨ä„Ç CÎ#²¤É“(Sª\‰RI‰—0cÊø@æƒd¾ pS§OÿŸ7gøäYó§ÑŸñTAC’?‚V[šCåÛ““àZšáÑ A&ÔÓaP„â½%dÝša ãpÀ9‹‰ --- NEW FILE --- GIF89a« ¨ÔQ»Ýv¬ÕY¡ÐC¤ÒI¿ß€¢ÑE°×a™Ì3¯Æ¸¸¸…—`/9½Õ‹mƒAÅß‘! £ÎM–Â?Se/t>¹Ó„l‹/•¹Mÿÿÿ!ù &Þ°à°xL.coÜXECÚpƒ¸|N¯Ûïõ~Ïïûÿ€8$D%Ž‘’“”•–—˜™š›œ–E'¦§¨©ª«¬­'q®±²³´µ¶·­ˆH ¾¿ÀÁÂÃÄÅ ÆÊËÌÍÎÏÐÅ G6žØ•ÙÝÞßà“6J*åæçèéêëìíîïðñòóôñJáøùúûüŽJÈ H° Áƒ*\Ȱ¡C†JRHœH±¢Å‹3jÜȱ£Ç Cz¼§ I Œ7aÀyyhA¸±ãÇ#K&¬¤…å˘3k`B(æ 2·˜0ÁƒèÓ—h@Ý´hÕ¢I³&3íÌ´ °Þ™´éÓtóÞM2Ó"‹ VÞ €G’?Jù\IIË#…bŽÄÄóG¡¢#*IG ’0r„<Ã#ä" ™ˆï@sQÐE…Ò £› V›²`J)5°q[O?Á‚ÙpÓ5ÖMSm¦SP€†“ÞP€ ;©¦”P?MPï €ëdø ç9Pˆë¤¸8!5#¬ x‚Å8F]^•UIl¢k 4Ì—]&\_8ÛªÿªK°æ÷ì’˜ìv¶Còv$)አXO‚l¨ .¨†0 /¡2ˆŒ4 8‚á |…´  0 <„ ˜ºÄêÑ+XmÊ zÊJ‚<6£ Mà¨Æ„rPŽ HàŠc at 9 E u,E þ# --- NEW FILE --- GIF89an §ÓO¨ÔQ¹Üs»Ýv¬ÕYµÚl¡ÐC¤ÒIÆâ¿ß€¢ÑE°×a™Ì3¸¸¸‚ŸI¯ÆÅß‘£ÎM! ½Õ‹/9©Ëe‡˜c²ÐwmƒAj:¬Äz–Â?t>k‹-—ºQRd.¶>ÿÿÿ!ù Jª\ɲ¥KŽILÈœI³f š2-D €³§ ÿ”| J´hQ%(’*]Ê4¦JBmРÓ@ÝzÕÇÕ\©zåJj¾G¥- $~„(! a’!  ³Üxõg ȸá ¨ZoîŒúåßÀS( N™õãްhÌãLÇ",O±z‚cÔª¯–žâ9êÉMaNÛtãè:ˆ«?ð \ "Ð-Ô" Ù-„¿C“ÐPH kMC! @0ß/H•µT@ pƒZ7ÊŽÛ¬ÖÿÃ9Þ8ÊH¨†˜1_|P€`¤jP´ ÁH @fê)!ûÒiÀÐëo©Dã”2 ÃÀH`ƒ1¸eELrHÃÄ$hhL‡ÇLŸ!q ¬Ç.ûì”`ñC --- NEW FILE --- GIF89a §ÓO¨ÔQ¹Üs»Ýv¬ÕYµÚl¡ÐCÆâ¤ÒI¿ß€¢ÑE°×a™Ì3¸¸¸½ÕŠ‚ŸJ/9¯Æ€! Åß‘£ÎM‡˜c–Â?™²fKavC‘®V™ºTlŒ/sŽ;l‚>Rd.ÿÿÿ!ù `öi»ßð¸|N¯Ûïøü| @&D†‡ˆ‰Š‹ŒŽ‘’’E ›œžŸ ¡¢£¤¥¦§¨ €H!¯°±²³´µ¶·¸¹º»¼!J2“ÂÃÄÅÆÂ2J%ËÌÍÎÏÐÑÒÓÔÕÖרÌJÇÜÝÞߌJ$ãäåæçèéêëìíîïðäJ#ôõö÷øùúûüýõ øHÐß¶HQ €›ÔâÌ ½)9A±¢E‹Q\Üȱ£Ç &tH ñ£É“(1&AÁ²¥Ë—-Lx ­8Á!|â˜xHR bAÝ`µ—\`qõCV0ÁYÁE—VKfÕ›n¥p‚VpiÕA\\uA“T @u<9ä™P&aRJõ×RÀƒ e‰Quš crýùèG"€/0°üûðÇ/ÿüÃ3°Ü,p‘ƺ÷ïÿÿþãƒ&@†!ˆá€L ›-°`Œ ¡€! --- NEW FILE --- GIF89a] ý)! _j`Æ´©Ó§P£B½€AªÕ«N5 ÌçƒG’±ÂzaC¬«K@¨]˶­Û·pãªýðA®Ý»o—´ØË·¯ß?¸àkcE(¿ˆóE€@±cÄŒû]"¢²åË—sÜÀ̹2‰7Hˆ!-€å$7Bˆ–cô¢IäÈ¡:Äì £[&8mºsç%‚ >Ç âÈ…/¨¤Ä°pFÃÛ|–‘Ü f¨á†vèÿᇞP ‰ ª]¡K4DOQýÄ#ŠFê’VºP --- NEW FILE --- GIF89a» #  …¬9w˜6¢Æ[µÚl¸Üq¿ß€jzL½ÖŒ™Ì3¡ÐC¢ÑE•À?šÅC¤ÒI¥ÒL¦ÓM-9§ÓO£ÎMXo*¨ÔQc|1«ÕV9GFW$¬ÕY!)‘²O°×a‚žJ³Ùf´ÙiªÌe·Ûo¹Üs»Ýv&-3;"Åâ‹ÆâºÔ„ÇãÈã‘’]«Â}“§k7>(Åß‘¤¹xÊ䕱ǂMW9 ÿÿÿ¸¸¸qqq*** 5c 2 38zbŠ2d7‰‹d?3g–fxa’ŠŒcŽ 0   60 7bž”cˆ8œ6‰?§6±tbvn0·f?b ¼¾¼ôõö÷6ÙøûnICZ H° Á$>¼øø‘ƒÃ‡#JœH±"† ,jÜȱ£Ç CNÌð#@’(Sª\&XÊœI³æÌn>¹`³§ÏÿŸ4yºÄÑ£H‘âLÊôh¤~ý! 9öx£%9Ù"0 eTkþ9§uByÕe¶‰&›£‰ £¤þ B©›ÈºjP(0ª­«ò:*)”š+®³–ªB±Ä[#®Oèš Sõðø~+ï·ÕnÜqÅ l²ÉKœ òÊ,·ìòË0Ǭò&ÈlóÍ8ç̲¬:÷ìóÏ*/ÂÐDmôÑH'­ôÐ& °ôÓPG-õÔTWmuÒKP`ÀÕ\'Ýt×`‡-öØSÙ&¤öÚl·í¶ íЃ¬1x‚2…6à`ö¥â`a 8Ì¡§@1ø€ E€Îzx„)XÁTx} †)@‡Îqb©PD,ta S¦`,fq‹]ð †$zQ‹F´B c…îsXÀŽ \0 Ðñ°£ã €GGØÑ+УaÀƒÔ‘­s Zðè$vŒ¤$'IÉØ±@4P Ð@A<иéE&P—ŸHP‚wããP›YÑš 00€øáQàNR þyŠñåàËO¾¼ùóèÏoHϾ½û÷ðã›ç âC'O‹êͻʕvY ˜„//8ÇŒ&¨Ù ÒôôSÚt£  0ÿ\Y²ÜC2|ð ' ¢,ŠÐÁ‹< #4®Ç8æ˜#xÐŒÀØA‹=©è &ÊA ½( þÀõ]V9Š‚XjvL–\v©Y --- NEW FILE --- GIF89aë  67+ X‚VÀ ƒ j35 "&$’“”•–—˜™š›œ”##ž¢£›&" 53jy„ h5"!¸¹º»¼½¾¿ÀÁÂÃÄźÆÉÊËÄ"h J2?רÙÚÛÜÝÞßàáâãäåæçèéä1 ?±ðE‡W jj;3Ž'"6&&(A° Áƒ*\Èp¡¤† ’˜`†ˆ¨>ÌÀ/ÍwòˆGÐDidÔ8a‚‚Ë—0cÊœI³¦Í›8sê¤Yb§ÏÿŸ@gš8Qƒ#W#µ`#…Ó§P£JJµªÕ«X³jÝZµB®`Ê»Dƒ’)ð#€‚’pãÊK·®]"l Ü e^• 8Ó±£ûxÔèwŸÇ&"¯˜Ü¢ŒË7^hfÁÂ…gΚ_ܸ £òä‘+>¾ØU eä(ÜÑÇ€9!÷ôÙË{®ß´ðåˆÀïQ‡’+_μ¹óçУKŸ¾êسgxÐáT.t)²7!C³ÔôXi†ç÷ðãËŸO¿¾ýûøóëßÏ¿¿0 U5ið ] @Ø t ÁƒF(á„Vhá…f¨á†fÀÿᇠ†¨a Ì€†HÓÄlép ÿÅ(ãŒ4Öhã8ҷ мeÄ?ˆÀÁDiä‘H&©ä’L6éä“P2¹A”TViå•DÖÀÀ*ÀÃ5ä(æ˜dægA™hæxî˜Ç[_T\˜ ¼¾€š ¥¢CaÔQ^¬r¡\Gœ ¨ež!Ï¢‘Cº"<€åÀlå”'Lå¼ |04)Š[R‚Šü€ƒ-+Œ¥ñÆw•W‡ìñ "Ôðð --- NEW FILE --- GIF89aÊ   º¤ºÀ«ÀÌ»ÌʹÊi`iÏ¿ÏÍ½ÍÆ·É748k|¾7@` ]i—IQp…“ÉŸ«ÔÇÎæŸ¤·¸Áߊ£ÍÓçÓÙì†Âh£ÑÛíÒDa4ÒèÆ»Ô«t˜YÌÞ¿WpCª¸›Îæ°lxX·Ûp¨ÓQÇãäñÉž©…?G)Xh* “x,1 ™“Bs7ÿÞWáÇ^¬Sþãtÿï¯ÿóÁÝÔ®ëâ½ÿ铯¼•ÿõÎ÷íÈvro  ÞJf;Ù.1 téñCÈB7~ˆî£³ŽÎ¢Ü(-Z4GZ“fÝ™óŸ_ëÞÍ{wËL @IEøp(Y¦ §ò¤r)Å¡"%Ëpå‹7N=KsãT¨(ŸNœJ–ðæÃOY FÅ .^¨ ¿ ø.Z迯¿?þþîå }.°Ð_ ñá÷‚‚ · ~,\f‚€Sdˆa†BYHað!‡r@ p ‚Œ­)gšh Æl«½–çžzö šnyþ)(ŸƒúIè¡ÞÐà b<žrèE*餔Vj饕F!Þb܇ߧ º0_¨¤–jꩨ¦‚ b\Há«°Æ*무Öj«­ jÀÒ–ºô¥0©Lg:SØÔ¦“ìÝL\¦øô§@ ªP‡JÔ¢&ŒGFœPªT§*UsRõªRÿUçô¬21PÀlgkDì4 €Á +à€j• .¼É`€ç0:q˜­c}ÉÎÊ€.p@!D šC ‰B` [øÂΰ†7Œá„ h° ,†&$á Rˆ‚ŠWÌâ»øÅ0Žq‹¥ð„$|ŒÁ˱ÈjØGU@²‡Lä"™È5»Yˆ—EâDÀB ™#8ôÏ€´ ºƒ%tD@©¢ÍèFo” G8ô hJéJ[úÒ0}žLà 0Ƨñl7°l§qÖ̦xxmÎÖlÓvËV‚Ö¦a—QðÂá‚*ö‚ã¦*†ÔP°ÿmØ!9HnÆAn߆ƒÛƃ±mç&[¢ö–JÈnLØ„LØJØ@&…>¦*ö6…X¨…ø6oò"R ÷•‹Ð ‘@V¿˜ŒÉhYÈ€YÄ(ƘS£ŒÔ8[ÂèŒÏXŒpŒÕØÍՌυ_Ñ8ÿÞ¨ŒÌ8Œq6ŽåØçˆÙV;“ €VÓÒVu1f‚úèøÈeâ =@fC@i¹–jÙ–lù–nI= £O6`=‰ÿ*8š£:ª£,P™€"·¤B:¤B ÐD%U«¶JD]p«xD´º«·ú«¶ZW v¢ HÉ*IÈŠSt­Èú¬É*%0­Ð:­ÕJ­ÕÊG"àÿ›yJŸD®Ju®Ád®J5<¾„®îªTÀ p! ¢ FÑjÑ0}-ò£GÐ=à>ð5°QM-À@ð0‹tAàG --- NEW FILE --- ÿØÿà   !P"#  2~yÖ*ǨÜ$ï%¥E£rSl'µ³ªA¹Ç¹:vÞ> E-g-ŸqOºÃï“[W“ÈîÓ¨‚­l„•†’á¹ ¢ëÙ©TrÄ$x 4ÜŒ*µúºã½,'JÁî2rÈ \0Ïák^‡¡y÷“,¤ÆçÂhÑùì çjʾj*·¦::¬}ãÚlqÅ9³5¼ :ãåfÏW=yÁ‹fÿ «U¡.ÅѬ³”—1ÑŸ$­F ™6Q…ÄÉ~åt-5—òÍðÓÊYX®RÊÃt³|(ÆWBÕZ3”ar ¬D‰j“ìàû½ò…Z  ÈçØðÞYÆy ¹BT‰B25Vñ`¯ 1rCâÁWj.ö}lj]KËø’ SçÏ«,wþ|úóçן>¼ùôžR¹!¸ó’jÍŠL& µ"^bõ.Á¶š…&=Hì#„"ìŠâÁ{ƒ¡fر#6Âévgl¢KMêÊu±YQö1:´·o%Îâ=ÑuŠ]ämIžÌD~GÐ¥¸NN4×P!puÕF?)P¤·“<+Ô2tî4–äÕ‘œU=fÉñÔà¥)97Ò—bMmËP” ¹¯’•4#^L­.T^K¢ß%)©<áAWm|kv ´™•–ιÉ=Ü3‹Ñ×3.ÉL½²¼–×'0ÉŠ»nu^]Ùs4iÈhÝ _(hBi¯2åWìåŠhQ÷q×ÇíAf~*·¦é. YÉl‘jEå;L¬ã™R†–e™ ÷3#HÇ{d)®NN’“tÀ»´eF'q@©;¶C޵Òü¼ t£%ɧr\3¹nŸ%É ¼ Óã®–€4Á†In’¥ÎC%%õI“ˆ:\Q{ºmZmZmG·uå±w{ÐÀâY¢VhÞŽ»“¶ûÑ×z:ïGMrµíƒƒÍcn ºïg O©R5$óWÒylW¬œãý9äï€VG”6¤yŽ$tŽhÝ,ÏéÊO$µÈÚ½€}løcÉä|\Åës(O¹ÁŒÚ ¼Œä†ïØËkö2ÚtË…²¤ýŒ¶åé¤ œ¿ô¡ÃÜî_­a±Ì(ù:Š?ðDѯ“¨¯“¨¯“¨¯“¨¬»Žq6~‡s#ëì†xÄÕz¹q£ŽKyïÉØ›b ïmR.Eaž"ò»™Y•¶mŸ²Ž.cõ®õ–r»„ M?… ¶äúLi;ʹs48⣛¹ñikfw‰Äeå_ÈR´Í±;:N'Èì.m’œ•U橈–,†qg"…ÿ =ZWÕÂá^àl¬œz°‰]‰•*"M â$=êÒ$Ý¡DKv¶&TqSk›%ö¨J mûØ 8í% §°'üÁOìØühÏæ fÇãF0Sû6?3ù‚ŸÙ°—©ºrÒ`ŽSõ¦Èî"ž‡¤yæRªaxftï,þ»I¦¥AÛR$«g#ù–M\Ó̸œ@¶´­  I!Iܺãoè9S "•©Hí•¡;ƒNÞä¥Hø¾ürzžüUì "bðˆìèÛ„$$£%2 ¼‹%l‰&û¢‘ Q™ž’À¸‘2M¶&Ë`­$ã4Í’@·”qÙNݘXiÅ´LÚe~ ç)áºtBT§ªÄèÏa8E¦ý<1JJä ‚J‡w‰ˆ‹,;0™¦Ù|~ T‰¤ü_~šS¾â‹}-' ŠRI’µ:,gLWVƱP¬@Vk$‹d&«✮ãCżь-Ó² UZ/QHÄ¢iUx6+ŒeÅÎE5{j@¬V kg$áDÄ)Â-µ"R³Ž'(umçÙÜJ¡@ZpÍÂÀ(’pÏmy¤¤FdÑ2Å­ re E öÙt}¾¼ÕèpÕS9ûzĉæDƒ-9tƒ=2 Îiéú8ë͵^hiZ§tºŽ;.&…å­Nƒ‡œa6ŒDŠvó\ò™ª‡+_CIÑIZ 3¡¤€2¤bãÈ HsXáHIS5})iº´d®•gëšUãIN2£•L) à×… ÷½_l:2úúRÓm»˜S çA(RT‡Q–bªAš‘\ÄÜM‘ÑçÏI)¼CUV1 ì„©ÆÑR0ÈeRp¡( 3Rue*V”’¦Ýÿ ™ãz«0ô›IÖƒø¬f‰_I¨’Õ&jÂRŸ_”TÛªNW4…Êeµ)`ÚBÐeŠw¦‰eÅx®g¢‘r7j²¥‡[’BM¶#*Lꇦԭ¥qšw¤ªu§¥+B²it%jH1Ñüß&Õ ZÑǧ¦n¦rJÒ ¥‡› RV…Ú'‡‘²3t«(YÌRF?ééQd”¨â 3ÀLížÇPÑ9"ŠB¡r,ÆjPT? ŠL¦qJ)c–ºÛFžhWˆ„•*fFb©8”„‚g2OÞj¬ÊÞB›SCÄ€Jq%‰úÈÂLçu¦ÐQ;)‚2¥(,¶RH€Q©sãSݦc†P—XSfâ ÁÜ#ô­×VÚDÉ6 ª¤¬}B|f­'têÜ8ŽÜÁ:D6ÊêˆuS5‰ÊÓg‹èÓ J³4…#õÔ_à#íDyê9ˆúÉ:²e?D¦ G`@#(Yÿ «QP†ÌÈÆKb[)›R p0B* OÊwƒŽ¨ ÝßÓÍÇ–'ÎÍÇ–'ÎÍÄ“V útóqå‰ó„óq1Z'üÂy¸-9RÚÚ7ÍäϨ9mªhëKŽW|]Ù%VoÇ• žnuüb'óɺSŸÍìG• žn<¨xdóqåCÃ'›*<ÜM5`¦O7«A§©.$î¦ItHîÀra5 MH˜;é=²vô\AÉ)ÖE2/Û*ð ;{–ä‘ñ}øäžçߊÓS`XILÓÊ2 [|çfÜ6„¥MüØÃ2’¯ H²VÈ’o°J(…H3ã‚n$L“o6[ÁÄŒÒ4IÙb8÷3=˜p2êÎ\Þ%Ze0q I*\í#8Ȳó Äž4­âû𤭹¤‹F~ZË‹Kcã”&D€gÅ]©Ñ`ŠŸ¯bPtÌ ŒRNÁ›C §„q€,q¬Ù27Êpê}fl³ÆÊt Ò ™ûQ>z}}¼Ñ8Ògma#pƒO"6£V†Òîb”«m±Q2f…ãv «*¶z% 4ô®)¤K9bq(2²ý$&L7@¢ÙªL¥H$F®rÆ.7áœ+ˆ®@ R”–W3âÓ +I~M‘²™Ë`ÅbE šìM™[BIE¾QdɰÌ&'aOˆ9ãÚûâ–`ý_”°ñþßL0E ¥NS¬“☮"E ÔHÊw€7 Ì>–†ÑK¬~@); 7%R»•¸€¡b“B¤EO¼tÅe5N4 HžÑÑõ1´ãÿ œYÍ4Säsèx™’å>…”@@G^‰”›ó …HƒJ­u²ÓÖGN8¦›t¢£Š²É®¡Ã@*¢ž£Â8n¼iVxÜŽÝw=”©¸•ºˆ.`*§J̳º¸LÄ™h·³ÃE²×Äl˜ý©ÊU_Caô+v…ÀÆOQjÞÁo™­¬!ÇAS  xkÊ<ß­úçIÅô±é›ŽÂ4NoÆ_ÛÅ "‰]•“êÕHO K éêGŒ3ŽÏ·:ÁPJuÖº:!Kªgl“ÐZš’ªi¢² RˆúÃÇ‚Çojùs¡ÎtBîHÔoصʩ®TvÙš¤­tɘÇ(u Ê<Z­;=}?9v“’¦a ¦ðôpöŸ\­Š˜É7©Ñc×´N,¸˜#€è" ê ah95àܚܪ mávåÐ!+××uÖN€x‚- äÆëÁèÙûd=¾ÜÓYFã“«b£(˜Dñv"¤h©&¢ˆ`HÁâáŒ6zÍÁFîÚ.“–˦" EtLt• ˆzJ"írýû”Y²fŠŽ:r¡RAº L¢ª¨q…(xˆðá,*»\=€£$üºÅ¸;Š]²óçm¡ä#±|:⛉—Dû  ‘Ìu:—†“•šŒMÿ n.¡×a$Õ'ŒÖ;G¸™»Æ§UºÅ0¦ªdT‚:¥0ï>3ø“­ýÖpêˆL¸Äm «l-®cÇpq¥A8 99(vO *l@ꪬŒC‚ r83”À€s¦R†7ï>3ø“­ýÖqûÏŒþ$ëuœ,ÙÎJ‡pÝÂJ º î>°ª+¢©5QY%1Yˆ¢JÂSÀ :ÖÊÙ¨»}ÎH92Kç |;I'Ëö|Æ»R"±œ4¥²ÄfPäo‡œMÜkáÅ_f;ÆÀø#’üøð¸£â]Å-²Ü‰•E‹h Ûmwb¶S­OÚ™S¼rƒ1?€ ™OÕáMm,\µrŠn9o‘#A ª"º ']2j¢ªfÅ)Š :qô‰¿ëüìß–óöò³VáfiO¯Vå$ òÂý„œ›FK«Nx”Z*³‡p=˱A¨¥LTL§´ÎÚˆÖµ )?2é I.Ú*Šò2+£R{' ª-ÅAº*®¨‡*d1Ä 2Ö…2S°.êŒ&׸/.ê!õÝH2VšIEERÞK2rø–F*œŠ S5nà«8‘>‘7ýý›áü…ä$ô$«eÊCLÜ!e"¤™ª*Õü{ê²í6T< Eb›ÖY¯b“ˆÙ¶v˜EÒËÈãÛzHá답 éF×\eÕ‚/ž½UÌ*ŒNR“ÚEaðá†Çw!k;BÜæ%=;puœ» UÃ[šŽI"ÇžJ»•åqêT“ë OŸ’™ nB¦‘ƒ¦f6üö‹f2rèA1ò]Ö7·=q(å›çè·,UCmÓ²…!šÆ¬aTÈ‚%DÀc òN¥ŸÙºoôÑÏЗݛ ¬£7`’k‚n¡-{q„™@Š¢©L™Ì€&¡GR˜t?~PÆ¥7î#ß”ñ©Mûˆã¾•ÏÕÖ-:íZ‚Ëï^šRËç)3fÙ0 &QwN—"i &1Ì (“Y|fè\Šc¡VK‘b‚S UÒ Kɪ€™Ø•5 ›tÕ]@œBSi‰BÖ*µ¨æÑ0¶aÑ0M»Fm€"i&B‡†¦0‰Œ"añ„[Uÿ fBÄyù¸,ûC]æéR´8BjÉÓcL›+2­zµÎÖ«.‘ˆåœ£¾ª«;zÒöÆ+O­ ¬âÌì‘­˜R9±äÔk+Ye(Á¹Þ‰Äˆ¹E' @ª§(MÓ®ICYê¶Hç13Ð6 +í1MÃG@%R9GPðÔ¦ è R 'b%TP§*ƒºH¤rŒÅÊà]²î Ã) s>Tc"Î~²¼£v®2–3½Á(L{“ùØš7É\¶H© ·M"•S›¬o”,ñùO$íòÍTͶ±±/QµÏíñi{ H,Óº:R쎙ùLSƒC¨ȦBq(ä™RêMÐ%»xÊ” ¹^è”+»ã2‘ÒÉ ZšØùÖ1ëË»–èõ (S¨UtLØšV;3ä¤,Yeù¶vÙ?!•.7·¨Yëë(Óì0µW‘ïÒNn¦”©ÊŬzI®è $™UU:¹6¼ÒÜ…ØÌq.êÕ\ιÝ¥$&cfR]6ñù2¸îËO¾ci¦r»r ¨“DÁ$ÀÖ,šUh²nH¤¥ðÎèSÛqmé±:7šlêé¸c)ù4ÎtȪEt‘3ˆj+=nK6>¬nßhœ«ÔäË.d™ˆ‡È8ýý$©2ü qý ÊÍÓ7B’ÞPâ*.–¨V1‹ºeŸgeTÜ]ž³°Çîü9&©Œ]CÄEÚiq0X,îK–;;Õà,ýª…:ÆHÆ=2³pÝI~¤Èå´[£OÞÞj^¿TjøÎA8i ‹)·ÈiX’Xœ®»S¤ƒ¤Šés³QP0Çœwk†„K¾²S¥¼;Ýmü†Bia—m"ùx6ùËë³JrQK²`äN+ÊÊŽeN’v›v^ÎÓŠÌT­»Y#¨÷;Á³0Ž€?­z˜4BÃvÒw†UË¢(™¢$aL9 e %QÜ8Û#+ˆc©ðQÓɱ6¨˜iÆ ãÌöA|$z-ö˜áeU4ª­Â:È_H‡ïº#øÔ•þ^¸ý÷D’¿Ëט¿,dЬ·LO-I³¸ÝÛ‰I¬ytlN¤-´«½&»IÇ©¦sJ¢+¼‚rø¹SgûœÉm¥wA³™v5 ÓëfF/1ãÝRвt!†¡aBLV`’mŸ.W”2D:¦ã8ØϱÈãä÷—7Ýãz™®´‹ƒnžº‰dKj5D’€RÉ(“Þ & ݹM«s¦ãùl¹öź¿åŒdêaÆEobm]É¢Ç/ntÑ20.¨•yÿ --- NEW FILE --- GIF89aÊ b"Ô³ÇöDÛ·'ÿHp ‚mŠLRŘ L_@ u•iæ™hžùÁj¦ ›n¢)&°´×›nÂçž)F[»ªƒ „ŽVè ˆª(¢‡6ºh¡€êCb\w^Øeªé¦œvêé§ r*ZPz`¨¦:`ª¬¶Šêa /°1Ã'b/™$ oÇ 7 )¨0·Üxß­wÞ|ïíwßmo›ÂF&1Äáˆ'®øâŒ7îøãŒLÄFXQÅå˜g®ùæœwîùçŸC!–1ÜP ¨Ÿž:ê4¨Þ:ë®Çûì«×þúê3˜àWôîûï4P@ÀoüñÈ'¯|ñHõG/ýôÓ‹Ž f‚V*ˆàý÷à‡¾ÿ|¯ûTö‚*°ï}ú ¬ï½/ˆ —÷‡}pÿ ° ý"¸K÷èä½î‰ï€ÞÁT  ð€DèA˜ ¸Â À„+`¡‡;„‚{˜+\ D"°D.ñ IÔ!¢P…ñ Oä‚å~hDzQ‡U¸Âå°Ð¥Ð@>5¨Á `’Ƥ Òˆ5 70ÁePƒ¼Àt}œ nÀ’4€ˆL¤"É€ˆá @£"á—ÔA~IA$| :`Š™LbÁ˜@Èx0„_"a˜À´&6¯©MkVó›‡B—( j}€èL§:×ÉÎvºóðŒ§<ÙY‚z~¯ |Û¶ÚçøóŸ ¯8à¥0©LgJÓšÚô¦8ÍiLo‰Èßb²¦P‡JÔ¢õ¨H-*8¹ö#² mÐ ¯`ÔU &À+°`.dÁ ^(f³ E,@ƒUBa[‚Ø·.V®SÍ„ ìj‚¬@7¸ ZWƒ’ž±UÌkØx%6{ˈ«¢† '(F8@†× â˜HÀ  ö.X¯Bà‚DW€…­kí]X¢D—™…±KTî U2;h"ˆÁ) ©kSàZÿ”ôvCÁÿHÒ~7 ©ÏØè3¢€¤+øyäSà„Gfz“4õüZðRÐÇÔó¬t€çЀhÆ©ý& ðR»Æ^ šÞ¤ˆ@T&¬€ë<ˆðÌð@™Lxº˜…,$š\ *æÑŸÿ›ÄŠ÷,T¤€¯ÂÄ +Tè‘_¿þ÷ýé7_}þ©À_þÙw€øÁÇàƒï™ÐT b…¤8€AM!ÄŒ4Öhã8Š¡: ™D&J )\ †têé§ †*ª¨ˆÁƒŒN¦ªj“@¬Jc«­ºº*¬B ¯˜ A‚Kä`à 禋îºé:„®ºð¾Ûîf$,ŠÉÛšâ-db ÆITaÒHVˆT°{TEO€å½ùê»k&(´ÄŸÿL.`ŒÓÆø…° ™àë Œ`gp®a K`!†˜Ã]á Yh¡¥h,î ¿Y€ ìÓ‚˜À–ób RçÅt1)ðb[ð0.ÀŒm¬+W—À ‹xÌ£÷¸¹4Å (  ލ1Â;ÿ͈ð«#„€ 9ÈAà HN¹y0LÁ¬…€/däT…Uu:³L`@ `XÀj˜ƒ&n ÷äšx…® m}k\¡FŽ«f5'àêL Ô¼@–ƒA!êXv©&`«[ƒת抮ù‚d)¬ “-ÀkZÑ*Ö´Õi´ÚÑf I®'EêI"7‰œYZöDÚÅâôñˆj\LP X÷ºØÍ®v·ËÝîf7MÄ2ˆèæ,34H¯z×ËÞöº÷½ðm¯˜†‰ñâjñÀ™*£0(ø÷¿ QØÁÃì[%DµbòÁ”ÿ„'Lá [øÂ¶° H €%óÄp‚”²) ¬ J]oš /0¨Pc‚´Ç€`¤n ¶(µS÷š3C÷âià …Uobp` ·PKöhÒ?Õ1ûC= ¥Õs>Lz¥XÊ?ÂÇ+bfd at -·ï4¦!tD¦hš¦í”† àV` C§rzCs:D1$Dp:§z*§Yp— raÕNfÈ’WptõÄCÇDǯõ´[Ðü Xú:tõ” OE-,¡&Ài–æ=X’¶t±ÿ¸·,±µqnR9°4° --- NEW FILE --- GIF89aÊ )9p“V‚ªe%?U,a~HRk7 „¤E·ÛpÕê¬åǫ̀ÓQÇâßµŽÔÔ²›™|Á¾œÿÞWŠ<Ä­PÝÄ]r7ÿãs¨˜TìÖ}ÿï¯þòÁðçÁÿé“ÑŘé߸ÿõÎ{qd'$$ J´¨Ñ£H“õò ˜ŽG¢JJµªÕ«X³ZݱR„ ×,@¦A‡€Òª]»‚³jÿ;4ÈÔS s1Hk·C‚ ™àÅ”áÃv›m AL J–1¹2B1?€äС#F 90ùˆáSÐb`Fã… Ð¢–îÑÕqeʸoOþуì”)U¨Xù | •(S´P©¹”áÄ¥hŽü7à‰O‘^E»•ãÄ9RQ>žŠùåA˜X¢ ö%F¬7Q¢þËøõKÌÏïžþþïýg{óPà®7Bb<`€p@„àE Š3¾xã?.¹ã”G^ùä–g>ùâ(„Ð 0€ Mh° /`Á ^¸RøÂfAo\¨‚ ½à„ª Öµ½¦1= <€Miž©9À^â¯É½#0*žŠ¶9y0‡i¾êëx:S5È@ð€Ibm= °”Ÿò9Ÿó©˜Ð 0‘£²ŸüÙŸüɘ`n+Z J G–kHø+ Ú Ê+;b‰ @Á‰—²¶¡Ú¡ñÅ \VÈ,Ú¢.ªÄÂ+ö‚4Z£5JÿnÁéƒE¸£<Ú£ MY = 0'.à8 u›F]Î ST+p·: 0ipÑ&t‚À m X€ xlxøÇOà~œR Í]Ô{ }[Ð/D¤WðJW Cz3N --- NEW FILE --- GIF89aÊ ÿß`Å®OéÑrÿé‘ÿï¯Æ½•ÜÓ®ÿõÌëâ½£›|õëÆ )iÿï¥uéiƒt1H+æî™Pt@©…‰½}ñŠqÐáA ƒÚJîàÀ„˜At RáABÙÁ9t‘ÐA~FdÇŽ¨=—.²Ù´ëÛ¸së.ÂBŒ“)SÑ›B 06Ù–\vée[R¨Ð€F |if[Ä癹±ù™knÆ çœ·ÉùftÚ©ç›lê CbXQÅ È j¨¡Êzh¢‰Êè¡VˆÑ øUj饘fªi¦êmêé§ z:Ãcfhꩨ¦ªêª¬¶Ú* À.û Y)<0ÂõØg¯½öR°€}b„ ÿ\ ,¶ØõãwPþõb,0‚ \_~&H1Bœ0Bû#ÐåÀ ˆß¬·½í‘à€i{@‚|@„ô Eøzà D°; Á/xÁ4‚¤àC(ÆAL¡ W¨Â ;HGºà… ´ÈÇ,‚n½aà6Ú`†|€à:,@ °€LàøÀô¥ßbU ¢mBÿž ¨ [øÂΰ…ŸŒ u¿ü•ÀX[¸àÄ(N±ŠWÌ⻘Å0ˆÁÌ,ëö ¬œçLç:ÛùÎx¾³X’ÏiôÏ€ôEk°:ƒ<`¥ˆN´¢\¼ä<´¤'=i"°Æbp`õmïÌI0ÀïÝÀè‚úö%Ô°Žõ§9 Ë0á¿ (¨ zH. JOºÀ…-€ š¢bX U€ˆž„É# ºTPaï8pã ΈÿÂÔ–)m Þ>Ñ<‚ÁŒ4€ÛFzH“F“0@ä]*È )ð þÈNåp‡ÙâW™`Xf%L™ )Ð Ð EªµC °[UMÎRxQ¯%f( C)P Àòysér•Nä(ıµIr%@ N;t›².'Wuu‡?P—R`—PBôXlYYõXýô›Y DZÀ–_àX4´–šó›ütY]àO•%D{v3PˆnÇw' E~ä®ä ±äIÞäL¾äJåM^ä·Q—ÉñO„ZŽœs:ñå`n)a^æf>•B-ÌlÞæn®NçË[Q5UaçSçxŽ5|nçKR—YÙjw<è„^è†j@M°ÊŒÞè¾Á¥’^aß1‚Ó|阞é'–GÀ¦žþéò6ÀNpϤ^êU–3 --- NEW FILE --- GIF89a£ ¬@1 d' ®zÍξ“°}¥·ï÷Ç‚Á´éž4ƒ„ Uxj Žt”••Wd•dXv–•giŸŽ¨Xz ‡…€4‡µ·‰~ J¼½¾¿À½96®¸Ç€4†µÏÐÑÒÓÔÕÖרÙÚÛÔÇ· 4hPK DÍD@@x›Y ÐQ möÈ·<à3QöÒÚq?®†N-oô¤ÒM`ÕqÔaQÀÿî5Ÿó±òQIáWÈ!¸IT‚[t\H´”Åï­áUO Ø ª²ÀD>caRK-Â@@¤ '„†@'qBÀ@¼UÒ€Ô ôãA D–’ @™#DõÊ:I¡‹®uéå—À4!&FØcæ™h¦©æšˆÊL&çœtÖiç‡PN ˆƒçŸ€*hdÌì §8ÌPÌ¢Œ6êè£F*餔Vj饘Bª%à§"ä“騤–jê£ÄœZi+›nš€,ìÓÎmžÕjë­¸VsËŒ¶a˜Èi­+ì°Äkì±È&[l11%£h4ÌVŒ<à8åÿµØf«í¶íA_lŽbÄèÕjˆ’€¢†´ˆGEèyU»î&çí0Z&À+†L™I,@ÀW¿9X/;±Ç…qð¹ÛV³µì»Ñ"¹9¥ƒVÂâÁ\) ^w%Ìñð- †ÂSX›€,&^—ÇZDXßlYæKËmìSÆÝ¹ì€f`ááLënÁ' Ì0ÐAKjúž\t+ïװϦ(îÚ^t½·†ÓW p³ÜJ·(tlÞm4 at H£‚SÕ  KëPe7{e)7vÛÌRU"s­}øæ€×YDóS×¥Ó¦x4à±ÁWX¹Ô«WÖÖœ;"î¢äÞx*›°—óÒ¥³40%z¡ö‚L€"‹P#x7ìœ_þí¦ÎC»¶s+Ð 8Á uš½õàc{oªážÜ¯Ó*«þúì·ï>±ÌE¡3¡ÉÊ­¸æ¯ÿþx]—ª p9Yy ÈÀ:°ZBÒ›h3¨ Zð‚‚"@edÀÁzðƒ a B --- NEW FILE --- GIF89a» ˜ÁHv•98G FX#µÚl‹§T¸Üq¿ß€³ÑxÂá…¤ºy½ÖŒ™Ì3¡ÐC¡ÐD¢ÑE—Ã@‰°;¤ÒI£ÑH¤ÑI¥ÒL¦ÓM§ÓO£ÎM¨ÔQ«ÕV.9¬ÕY^t2°×a ÃY³Ùf´Ùi$+ªÌe·Ûo¹Üs»Ýv½Þz  NY6Åâ‹ÆâºÔ„ÇãÈã‘7>(Åß‘’¥kÊ䕱ǂo}R (5<$ ÿÿÿ¸¸¸,,, õ™„¦ŽŸC“®,ª´©Ó”K$HJ•êϪX¥zø1ª¤þ(@u\X³S¯Jø¡£êX«8¬zȺvŽË{ukU´kɦ›vîÚ¶Sïà·,X±ˆéJκ‚å˘3[q”ç 8ç¬óÎ<÷ìóÏ8Ÿ §Ò:. ׯ¼«Jè:kØ.|ÒWo}T“Mu›`ŽýdLØ÷äKö„QE¨Z哟DûðÇ¿©Xn%*ýœ9}¿#+A)—¢“ <пÿ± 3–"rî—¥ŸÐŠRWà<`% ðQg: o @¶ˆÊ8K¸T/¸§:0 ¤ß¨ìà†nœa®pÀ1Ê‘„ÓÁˆÓÀF5~p:nð0 ïøa ÞA2¨‚郊¡ŠfŒ¡4bMAĺFÒ(† ¸ÃÖCENE™Ô"äaEbdÑ4\°F4’1,‚£ ä(G#1ÿégt L(0€’>ÊJî¨h2%f©@(=IÊ¥|2“¦¤ RDÉ•» €”?ÀÁ K&$"E‰àBã0@…`‚ --- NEW FILE --- GIF89ax }Ÿ;Éä”™Ë4¦ÓM'?N!,6Ym1¸Ûr“ªdm~K6<'ž ™ ›ÖÖÚÙùìâËêìô}SQà€Áƒ*\Ȱ¡Ã‡#JlX€¶ ÜéÚȱc® °%P“e‘É“(‰ÿ€óȲ¥KS†”4À&€ÁƒUr,ZEçNJE+J´¨PlŒ}`N¼¡9‰©x tÅ‚'W«2š‚*´¬G© uÐt\R¥hM«ô ÛªŠª¡ú$îP8B±@µ[—(Þ¾Cù<ð páUtߢ]«˜è€FW•i \< € ¤éNPøJ&vX:°ëd‹ª“S- ,ŽP Êà´Ôº²f+µØfë ®õuë-#S}+.}±Fj«nK ‰ä€YV'ï¼ô¶À¡! --- NEW FILE --- GIF89aÊ J´(P*j€¼´€Aƒ§P£JJµªÕ«S30XЊ "`ÊK¶¬Ù³hÉòñ‹Òÿ´«Q¢^¼»xó’P/o€K ”˜¢H£ÓøèSŒ„—¢¤ u1S°cbr¼¾”(Öm°pÁ¿ÅÎþÿ¹Ð€;ù7` ü xà~.ˆÔ-¼ÀÂA@À… \˜@†&À€pÈ¡$p 4 И@—8p£0¥!‡j¨!ÿE*DD<%=,eU>9[[`™ZXÌöd_Zå•gN)å•h®ù$ÖÍ †gŸ„Þå ¼òÚiC %ƒQ(ÿä‚`6€Ç±Â¢4¬î D°aàœ3ÎRå¼3T??•AÏF À# s"2Ï»Ð9Œ%DZT—•CÁcÒñÂê˜ÒŽ6xðAc—MöÙeǃöÚf·ÍöÛnÇ 7Ûxð‘ 9ÜÐïÞ|÷í÷߀÷ëƒ "m±RYX¸â‰/îxã3.ùã“GNùå–[¾ÒM—˜  ‡.ú褗núé§¿@¸ DðÀë°Çþ@d ûí¸ç®ûî¼ß‹=ø ÄðÄoüñÈ'¯üòÊrŠ2× !ToýõØcßA Öw Â%ˆ}‚ÿ $ð@! M@\Ä…ç .9=ä¡f¸…&(! bÀB¶ƒ¸$f¡ UèB– -0‰JÜB¸ð¦0…VØ‚uL @'Ì Iä 5° øâœ`!ä9§ 36ÿ¨A±Z±vuãZŒ0j+hÐ¥ò`øÀ¸Ï|ùÀ;(LÕ­b‚ÐPGQ$±…XX¶ .pÁ õ‚aµ0Ø%¸° í9BNðúU°R@¬˜@ ”Ê—Äà$€Á0úÐ 3øS ²š¢VP–k¶+_[† ,À €@$ L`éo{+@€Gp at B\ëUØÒ¢¨ékYW“À·æë6uë~ ×Ôu²Íê7Ø!/nŠèM¯z×ËÞöº÷½ëõº^f-:Åëa= 8¤/!,²V±àà ±ˆGLâ›xÄ«uY¬Åa Îð+— œ0P*nëV7v Þs1  tT£K ¨h‹¾^¹è\zuŠ´ø‹¶ˆ‹°XмXŒÆØŠÈ¨‹CµŒIÓŒµøŒÂ‹qá©x )p[€’}†ÿŽãXŽäŽä¸=˜Q.s ð2[—LÐN@†Ñò”P9O)•Rù$Ti•ÓâLp‘E‰ë UQu©ªÔC©˜Ú©Žú©žÚ©ÕO#ð&P,&@A ´Ag•œ«šœúä#„NPXˆã·j\ Q¼Ê«>$QN4E¸¬½Z¬Y€«ˆsN-€wÕvj§FožÅFÕvm I.… ÿšœÔIßZ®¡DK Kåº®Ž” "Á£MÖ¤LÍ4{ÙdMøz¯ú*¯ûJŸ%€Ñc£qÍ«Ñ Ç=Â{Uu‘z-ÂËÀÑh.³’?@ùR09 at ATr”/T5-A8­Ó—:  T£X°ˆÃÔŠóWÐ8ÉaM L --- NEW FILE --- GIF89aÊ J´¨Ñ£B0HÐ* "P£JJµªÕ«X«ò8™© è“‚ L F ¸! Ö8eH ¡c;у<úxƒŽ¦á# ! šÿŽ>‚dAòåSNÉ$ã %``B<d›í<ÛjÛ­·ˆÐ­¸áΣ ” & bœÐýóÚ‹Àýÿób¬Ð[Ï ¦ú" Oh€¬ð%Xá .dá^èB,TÁ [hÀ •p®‡V _,‰,":¢$Š,[Q—ºX íé%@|å÷¢0 £'€ëÒñ÷ÿ8š£8ú‘b S5k`ºØ À"¢"Aˆ!+• G)ÃF~1½s;Aõ”á:‚´ --- NEW FILE --- GIF89aÊ >Id4<‡QZ‘]fЊ–qKR²x‚Ò›,[UZœœ×Ê×åÝåëäëçà纥»ÆµÇ…}ˆrote`j@>B§£±&&' $k|½7@`]i—ƒ’ÈIQo «ÔºÂÞŒ‘¤Ñ×ë†Âh£ÑÙìÐD`5»Ô«s—VWpC›°‰hxX«¸œÎ岈•w·Ûp¨ÓQÇãäñÉ >E-Xh*%)27 ||c™”C£ž}s7ÿß_ǰRêÓuÿéÿï¯Ãº“ÑÇžþòÁÞÕ°ìâ½ÿõÎ íùÂEŠV "\@À´©Ó§P£JJõé Z-áQ¤«×¯`ÊK¶lXŒ8a”€Áÿý þü¹§ß}üáä€0¼wPp ½ö®i #ä4ÔÍ>É@Ô0˜ Ë‹"1&$ * ä(A¯6t"C_r?a¤YdaVÂ? Q©Ö.«q;b˜ÀtwàÝxß­wÏÝÔTA4îøãG.ùä”W^¹5õEÈœwîùç ‡.úèG¡Ö1È úꬷîúë°Ç{ ðH¸ç®»PpÁîÀ/üðÄ<#ö€…åÌ7ï¼ä\8¾Eã¦_r¦(p…@÷öÜwï}ÛŸ@Bÿ$Ì „aãÓ]¾â«#pð”u¿ús“ð¾†y@ uó rp¬ À&xAF0‚ ÌA MxBÈùà(¸BP:'\ 6ÔB¢pCr WØxè Fá+âœÀC-dÁ†;¼‚”˜…ÍaA YЂ·è9,ì¨2 Á h ” d$Á ȨºÌ@4PcßHƒ€Ñu<#u"ƒ,h¤ IÈ \`EdÀ‰*  T  ¤Š.P H€‘ޤ€ ÿC°ÉJŠr’Ô€H ÈPò• ¨ )mÍšÚô¦8Í©NwzSm6î+C –Õ À«ÛbÄQ[† aaã Œ”¸Â] ¾J—¨Æ`‡½ÀU¾¸÷½ð¯|çKßúº÷©!à (°êÂΰ†7ÌáPA! +*[¡ÞKÔ ñaŠWÌâ»øÅ0ޱ‹{ö3k«Ä5šÀãûøÇ@²‡ücD 帓ÿ/â£Ác5ª0æ=÷A¿nNè\j<Á›ùé–G¡ QAAqتwO§ú…€…-”tÆú×é<:wa Nà‚Ø» Y`l… Œà¢¡%ÞáxQ5šö%8ÁEEÇÿ5Ò€2pcßw5®qMh¤¢CyRÉ;W¤”'©äY‰ÉcàØ8OùP")H 01¶ø‹—•‹™ET¼H‹ÀxŒ¸‹¥XŒ©xŒÀ˜Œºè6Åè‹Îø‹Ð8Œ±¸-ŽÐŒ6L¥qî5tÿŽ’QŽñ âXŽ'ðZ)À0î²5¶°­`J ˆ€ö’‚€Œb(þ()º¡J°6—à É: <@l•P9•RY•T9•DÀR Y^0™£À_Vhw2qyx‡€jGQhWb‰ Þ( ˆt‰O ´k™‘ÃpìðƒÏ·Qàuˆ8˜ µQ€—˜à j  *Ž š  Jq/Ñ(ò(¡()‚Ò¡j¡‚(iã5ÞñæQ*(j*)Ê)+z¢*ú¢,ú¢âÑ€jQíÿ+8š£:º£;ÊPcIq,B:¤D$ç&LÐPY-LÚ¤N-iQ9 ÀYjñ—¥Zº¥"€jC¢ÿ—€b:¦¾¶•Â8‚jº¦#È+c- mr:§tÊb-ð3_ õ–…|Ú§~êc€o Ù…W¨†z¨7Ppzi ðeOPvÓ=4©ñDz7vC©t8ñ¤©úÓ© ª©¡:ª¢:?P‘·@ð? s=6)äO'”A@°O(¤B(”«øÄ«ý´ °¹˜k Ršëh“ÛR°#:€Ÿ8E°ºÔ¯·´V°¹\W9ÀlUM½«Ÿ7Å´€í ðò¼È‹¼" .ÉÛ¥†ñ}e ½©Í+!zW†Á†!°‹ñ] jË«¼Ï#Ð'& ¡‘Q £>Àh8€¿ö[¿¨Á00¿€Â’¨1)¯ñ¡ Ú?P)I@N@Òáͱ)Vðã¡)Íq2ÖÇÒ\ÁͼÁQ°Q).z¢VpCór 48ÿR Ò,(2ÿÃr 8!Ã81ù1P --- NEW FILE --- GIF89aÊ §R`¿cs1@%*sJQЊ–±wÒ›œœ×Ê×êâêåÝåëäëçà纥»ÆµÇ_Yb„~‡plu§£±&&'$k|½[g’@Hgƒ’È «ÔºÂÞŒ‘¤Ñ×ë7:<…Âg˜Ë«Õ–‘¡‰ÙìÐÁݲ§¸žG^1l‰JYq= ƒ—f£¾nžÍ@¡ÐB£ÑG´EªÕU7B µÚk¿ß~Âà… $)txb ÿß`íRäËb€r7ÙÊÿﯤœ|Ä»• CÿèŽìâ¼ÿôÌÛÒ° J´¨Ñ£H“•PaÂÎKFx)r„jÕ#W³ZÝŠ•«Ö®`¿ŠõZ•GÆLHÐÅyÿãÊ‚¼¹ Dè¡W„†%úÞõK°¯ˆ€õ’°‚p^!@ØK·2A :gì ñ£†5jôØÑãG <¾ôX½CDèÕ°kبAº´ìLz0é {¶oÙÀ ¯ñc‰˜%R¤t|’\¹,Pžc¹Ò1zæÍ¯+ž‹r,QšK‰2ýJvèÍ;z|‚…}{èÆg¨hAŸÅ|ú+VÐoÁ¢¿~+ôÇÂ~ÚÇ ê`"Ð7ƒ  Á„Ph!PˆA…@%ÆL èVBñġѱw¨¢‹*Ú^£‡>ºè£”FÚh¥Œf )¢ˆ¡ß~ †Êß§¢–Zê btÁ„¬¶êê«°Æ*무Ê(†Tn©ë®ZÁë¾þÊ«¯Äa¥Zßà ?xX˜@+ðP U¨By˜ÉaáBd‚n(D*(‘ H|ؘ€… >ì‰Sœ·°9*LÁ)"ˆAƒbð‚ˆÀd$ ^Љ`1X âÇò½àm<#]ò$°€ IÈBZà$VdDR`‚ÌP +`€FVÀ.Z€%-Ð 0 ÿCX€4 JIZ CK ·ŠBÊІ:ô¡U¨•.€ŠZô¢ͨF7ÊÑŽz$BFJÒ’šô¤(M©JWÊÒ–š I€é+ŸÇÌ• jŒ„F¼€‚’ÙE% [ØB²€Ï½æÕ AÌÍœª‘µN•ª Ði+LÐSØ%pA^°†n t%( FÀTªUªO³EN;Õ /d€_¨@P» 0€°èk/@»Pò H at B>ËVÄ€´˜pBŒ@üà@Hî*GºÌä÷k;0œPXÐÞôì0W¾ ;èÿ€Ýû^s` ÿL³< æ6»ùÍþ¬‚™çÑ:ÛùÎxf¨/‚Äö£€´ 7º€ÇE¦.M´¢­R$˜å p)0å ˆà¼ä ´øréñjÀ/ç5¦GMêò’ÀNF îfh°ÒðW¿;àÁ«gMëúö cF0Tƒ …+(ø †¢Î¡€½ëb/ê KÁ :ÿìŸ-[ÄÐÞp€ž âœÄÓ d ¢Š¿(ãE¹ >€ÅE¡Q_5àŽyâŽô¨'ôxÐ…V‚ p޶àÀOÄlfl Ü6jåÿH  àH :ev.ï'( Ú ê OãQ)ïá( V¡Z¡’‚)š¢¡ª(v 2 ¦R¢&z¢(Š¢Ø->Q+.ú¢0*+6Ö-Q,F9ÿÁ’£8º£DÉ£:Ú£@ú£Bê£7¡©“£Ð µ¶0°pÛF‘µP.ÀÁWy…HŽˆ €xµƒy´S¢w ÄGLS¬›$²+&]$;€+C°MP6[(_JbM0¿”+]¼%<ào3e_¥Þ%jÞ¥TÙbŸÖ¤œ¦{lp|È|¼yapœ†apOz)«Aõ×~²¦~ôw~óWÉ—Ì~ó'¿õwú•Kl˜((lH€†âÀ ø¯¬kÖ!lø`ÍQl[¨lÈF‚$ ¿Ü½Ü‘¼lÓ†’9ø§7§{ú @(ð:ˆ´ÿ3'@ Ð ° J«•!³ÓPû«<ÃÚÌ#Ú¤=Ú¦=<³„G²‰GÂ>`G°Úºt<«=Æ_#L }Úº-Ú\óK `U—•„•!kÜosÜÙDÓÒ¤K²ÖäÜpX‡3ðaÅ›ì¤Ý„NÜ«F7U;DÆiu¥OV+PJk¬ÔZœÇù¬zEˆP|ßêP ÃFt+®á:¶áÊPâ÷·H;¢×·•[Q´µQ.[nQ°y”ȹ‰všŠFš^RHàÛÊ‚6Ò»áÓ»á·{¶ â --- NEW FILE --- GIF89aÊ   ›Íƒ¥Ò¦Ò‘©Ô”ŸÄ‰®}v›\`xN&0>%&3Sj5 CM2¶ÌŒÕê¬åǫ̀ÓQµÚk½ÞzÇãßȧ®¸˜“”mzz`ÕÔ²¦¤‚™’As7ÿÞW¬Qþãtÿï¯ÔȘþòÁú”ðçÁßÅ`ÿé“é߸ÿõÎ •-P|×< “(Ì{ç  •æ¼µ ‡üúô(J®ÿ›ÊË#R¨OâÎ"Ü«G!EöõQ X¯_¿{úýÙ—Â ý‰ Þ?  À‚ 0À ƒ 2€€0È (€A ”Wnùå˜g®ù曯 ÂO8 úè¤;`Á”®úꬷîúëª' OP®ð&\ ¼‚,ðArp\P®À,ˆp…,ÄBT¸A+0a #Ü` ¯`ÂÐ  b«p…ÂaáF(PX »PŽx¡Ü  x ° X@ H#HT8V  HcÄ` D`uŒãÄ€F; Øc‰FEî±ÈÀéG1´ñ’¨€èp#pÁÿ 4jJ&<ÁL°(A&² t%*Ué´PÚò–¸Ì%(`ÛÕÀK‚x–8@Ìbó˜ÈL¦2—ÉÌf³d6 4§IÍjZóšØÌ¦6·ÉMlºÏnwC ä@>XÒm`ƒÔ`ÒœS™º@%ù@9ÿX@8Ôt U[­h|&¨ Vp²`Î,pÁ GÀB™€ÀQ­àj7¼šÒ]…Õ,áKNWàXŸ*ðÀ rjŒÀªÉ+P÷:¡ ÚX!Ýq•«N.H¯z×ËÞöº÷½ðe/t`5}Wìðëx [øÂΰ†7ŒaÇm_Ë*¯‰€PàÄ(N±ŠWÌâ»XÅ @@.Ûàûµ>ˆ‚ „ÀãûøÇ@²‡ ä(TM¼†np‰tÍ™P޲”™Yƹ%°›Xβ–µ9Œ„è ì ³˜ÇLæskýL³š×Ìæ|VY ˆ ªNÎa½êZ   2A|,ÜM˜ÃÀ¶ð€-ž`/>qÿ CæoÅMär›ûÜ<æÕî{ X"S.f:L áLÐ@¾‹¹(Þ`½C€b–ïyôæ@N90oôƒ0>ÁÁ–¥)8ðÀâô£¸lpÁ Žý£¸ÄG-Í£Ò €ÿx CéHóEÒ’Ö ]®û&ÄÌûM|q zMÍit<.ØŒzëëÐñ󴦢觗úÚOïkÂ|øZ0 RàŽpþ˛为8ÿýŽ£ êéhþ³ά]-üߟ7ªfkR`ŽÅk¿V ¾Ök 6l è¾Æ`bÜ–b7"'Fm m'6#¬bb ×Fm(‚ÐSÐF!ØÖSÔ6!×6#ˆb p#<àcš6nà&ÿQÀ<˜nà†>˜n<èV„>f®Çd àW*ñ‡€ Ù =ÐŒQpB Æ;P_—À‘ùŠÑ ˜ š €–®H °+%|³W¡z¡s¡-8¶|åסê¡`a5I€~X¢&z¢ÿu R¿l.ú¢0ÊŸ#Æ2ƒ6zÿ£6Ú3—•5h„>ú£ç¦nPi ÀdM d£<Êã=æó=J*JZ=Æ¥Tª¤ðM@$ô>4@±¥[º?`:¦dº>6À®å@OlÚ¦%ä¦;ÄC:äBnZ§mZ\ÀÏ2À–÷Ttñ±9›ˆ5¨~zO+ð`° zÂeªH ˜e¼uœŰÁù\í}¡ñðµ^¶`ëp¢^«ø†SpR¶×Bàµiƒa>ÏÃÛ eÛp¢ÿÐq·1j£F?›Aô…}—­.ÿæ2j¢‘Œâ¸‡?7 0ðŒôñ€{8`5ô×_£ÏaLpJ`cº×Ñ_[@Èñ @¾3‚lä;H !b€‘p–¾R¾9!‚ –n$Ƀª<Ê@:d)q --- NEW FILE --- GIF89aÊ _r¸k}¿µQƒ R ÷—³ 4€_úZõMs¡¯îr߯”úÕ°–oÀU„"tfÀ§Yp‚1£ë^ûšÀ>`T¢bG¡ n±ÿ“aeûÙnÂÅPÀâû§0CO·ýb:Æ€Ûànq à“€/JÀ8w’L;#CàUÀ€¼îzÇ›·Eh–-\e~sùß ÈP0ͶPàÄöY@XˆlHl¸ÄmYPlÄF.f!ß¶2Cþá*(àbÿq,f‚+`!/Ø*—@ÿáÆmô‘ *PX`<(Bp`{’(íh`°AV]s PŽ´`.N&0`aQ€aRaÓ±)9iIYð_v^ú¸çˆ *€0Ðß*åqåÑ‘,à‘É‘¹/( ù5æX ì0f—`x!‡r«&_ip…Е˜`2—‡nyO“£fiŒÃpì@ib`V >P‡R(ƒ¡:¡*¡³Á'=@‚åÉ‘) ¢"¢Mà@«’¢*º¢, —PJ+2:£4j+@ÿiK°$S¹£ÇÒ£> ,RY,ŠC9 ;50-0]'âH•dSÌjSËʬJ©Ô¬ÔjS ¢W at TÁ”KÛ:ŸD5ÿ<%®G@®âZL@À|–€–5c‡fà³q„Jy?‹¡U_f6rçUðà”ô@óàUéóMqѯê4“IpsI0twå]ô4AyUBƹsÞ…tõ´[±ks›twÈ1tW@ …WÐX`7Ye|\0YÕ(Ë—åv{¹vXY(Û³3k|-›P•Uwe$¨«õ)uxõ/°Q©EØÙZ¦•· Â[w´˜/Ð  yÅ•͵ * B;B;>¦Âp AÌ'$sÍÄ|¤øÒÑî2P2®3m<6ý.I`P)Û(«SpNÐÓVðÓN0\—²0ÔG4CMp9KmM²E4CC=A=CA@ò:#Aˆ'Gw$ä«2 PI‹ ys+ p‡mQAB "Á³;E‘"K F 8=@Ú™È@`=`8 5@`¼@ IPÚ§½Ú<}¼É„T¼]ÚãÛ¼ܾ]ÚU‘Ó 0 --- NEW FILE --- GIF89aÛ V(ÉbJ­Z¯ØìUªíz¿à°xL.›±’ ÅI\8€¸|N¯Ûïø¼~Ïïûÿ€‚ƒ ‹ŒŽ‘’ S“–—˜™š›œžŸn'¥¦§¨©ª«¬­±²³´µ¶·¸¹º)„¿ÀÁÂÃÄÅ€)ÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÍ)ÆàáâãäÃ)èéêëìíîïðñòóôõö÷øùúë) þÿ ˆaÀÀÎq6L ”‚Ñ£H8p²å…¤P£J…jªU(&@p¢ÂÕ¯`­ ð*u§›Ah {5£¡ÖV Ëi xóê%àÖ@^›ö Lx¯‰Âˆ ˆ¢ 8”›Ä##~<8Ã(½¡.H†¼Þ ¤ðRÞ¬·×€Ó¨Qs›ú4× ­cËžÝÚíÛÈ.\¨»‚ ظƒ §ífvÜÞ2 ÇÝYvñå­S4˜N½z( Õ©ûž®æÁš ӽϥð »xߨ¯I„}z ßå³W*>wžc«¿bö5OXמ{äQwÞéQ—Ÿÿ| ,˜€×@Aè_…¾Ih]†nqGžwôiÈàˆ º„‡ 豓c 1àXVx¸aÙPrì´ZŽ/® |^9ç†Ü9t¨ÝU˜  –tì?åe鸗ŽS”Î^‡ÐYî¸FÙNð2hšñEQ<^ 3¯”»‡è»gŠ5¿–•UÀýhX_zò¿ÿ•~íÝ“¶WQS­Up©uÔ¼e¹”µFÑÏÀul‹Q¸¢8À(lÖ"@øo€‰@ ]h¿<å(üÃÊ‘„"E~Ä þ¢’¬ýEðö a]ìò/;là)šÃŠâð‚éf@©¡®‡‡I)f–¹!Ì–ßt e7ä…Ç^&‡ÝÈFM*™e–²˜É0er(Ò‘bv:8i,sà!E¦³ÿ4$ˆHÌ‘¸ü£Sñò·â¸¢7.ÉAøGŸôÈ…ŒåJÃÀ?þج@À x "ÖxȰñ<ã!ИÈJ—ÑÒn@£¦ÚøÈMgº ™ºÔ2Ý)5‚ª zÊä¨HMªR‘]8õ©PªT§JUª¦àXͪV·ÊÕ®zÕ«F]ªXÇJÖ¥¦à hM«Z×ÊÖ¶ºÕ­)(€\çJ׺Úõ®xÍ«^÷Ê×¾úõ¯€ ¬`Kغ¦@eM¬bK ¤`ˆ¬d'KÙÊZö²˜Í¬f7ËÙÎzö³  ­hG+ÙŠ.ö4ŒM­j÷ Ã¹…-]a!ÛÚÚö¶¸Ím^quðŽ o pƒKÜâ÷¸TP~„æ:÷¹Ðîs—àH÷º ØÍ®v¡Ë„ --- NEW FILE --- GIF89aÛ Z"ÊbJ­Z¯ØìUªíz¿à°xL.›±HÄI`8€¸|N¯Ûïø¼~Ïïûÿ€‚ƒ ‹ŒŽ‘’ S“–—˜™š›œžŸn'¦§¨©ª«¬­­±²³´µ¶·¸¹º²)„ÀÁÂÃÄÅÆ€)ËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÎ)ÇáâãäåÄ)éêëìíîïðñòóôõö÷øùúûì) ÿ šÄ೨ѣEC!]Ê iä‘X©¤‘{A‘AD 4Y`dL A °¥ Zž0å’$IÚ‘ï¥i¥˜nL) ™`—œð@‘I^ ¦dé%—|¾¹äV€þ™§ p&ši¢ °`/pàD»<Ê«¯ð–è¢À)º[pÀ/ iÂŽ /¼. œ- at c4µÙj¼×X"w›6@tsæ¼y?†bck«Ðög¬Õäöc€»MAÝ<î÷ct¯Öødq³ÐÙXr= —s0XÿY("f:bd•b’E—èžnz\Ñd@/‰Vi«ß…ë˜/YŸ˜ê¬g@üEÀëd OÖ``ü[ñ%ýYÄÊŽº\:!E QAì´O&#°6‘^=ªPºÚr•\‘a'dâz€ ÄÓˆöÜ¡‹:ωîÿýă2®ñdã!€ÆC¢1“2¥ÞˆL·1‘”ªÔ¥1éJ«1Sgôt넉P‡JÔ¢ "»HªR—ÊÔ¦:õ©OMÁ'¦JÕªZõªXÍjVƒjÔ®zõ«CMÁÆJÖ²šõ¬hMkZSP€¶ºõ­p«\çJ׺Úõ®xÍ«^÷Ê×¾úõ¯pMÁÀJØÂ¶HÀØÆ:ö±¬d'KÙÊZö²˜Í¬f7ËÙÎz¶±QÉ(asØÒšvÈܬ --- NEW FILE --- GIF89a] jÔ¸d€ƒ CŠI²¤É“(SšdG+hÐE³¦Í›8sâ¼€A§ÏÿŸ65 `ÎÇŽ$2>)õÒâÅRN2–|˜JµªÕ«X³jÚ¡ÃÖ¯`±.qA¶¬Ù³mÎÎ0è¬[³iË.Xð–ÑÛ»xß. Á·¯ß¿Ïþò5ðÃÃ`ÊBPðCAßÀ(°¸1ߌ€ˆœ¸²cÁ /I@º´éÓmN“†Ñ˜4®o$xMš‘ë'°UëF­ä€ïßÀƒ?n€ÀŠ ~Ã1QÂ7ˆ"~_^‚ÄçÑ}›óMÝ9ôààÃû^‚¢¼ùóèÓ«_ϾüíãËW¿$…ýûøóëßÏ¿¿ýø'à€û-Á&¨`~ --- NEW FILE --- GIF89a@$ #' »Ì"ÁÌ“œÀÌ ¿Ì ÆÌÃÌ®¶ÉÌÊÌÆÈÉ˼¿ÇÌce  j@!qÚw^HÿïDÂ@‡Ä“`„2 üæçŸ€*è „j蠪袌6êè£Fª]‚Dî·XŠ ñ˜s7Ôठ5Ü å PØ©UŒêª¬žñÆrÐ1˜…ýH X„È¥AòÃsŸ&C]$+8ÐÀ±È&‹lwO(ëì³ÐF›,9ÒKmõL«AµÜvëí·à†+î¸ä–;–hÀ ÷ÿË~ËAÒÂ$Á*³IIÌaï½öz#6øŠÀ`ƒØûo$Ö;9÷žóÁÁõ¦àÀö"Ü ÁûkÓ])D¼ÂŒÖÍá°ƒ÷+òÈ$—lòÉ(§¬òÊ,ß[‡¸ìÑÇD‚²®Yİài¼ÊÔÐ -ôМ#Ð B 49D/­Ñ<4ÓBo8õÓCq´ÓAŸ34ÓTò äjˆqFšå+;óŒI ¯ÂâŒ7 /N‚4‹×Cã?a‚åŒO®ãC5îÔâä„°Áÿ¤x¥‡pŽèŸ×óÁâzÈNÿú猧d:ê˜{ùïÀ/üðÄoüñÈ'¯|zȬ˭‰íÊk¦<ÈùC …ó\C ‘Äðà‡/þøä“/Á”~ú䌿~ùã€>üàŸÿ½úòW@?ýò§¿ÿÿ &L¡ WB d€…0Œ¡ gHÃÚð†)Ì€×@@@Ïo¿pS#à4„9èˆÕøÀšÇÄ&:ñ‰PŒ¢§HÅ*Bñ…VÌ¢·ÈÅ.zñ‹Y¡ûà‡Þj,¹*Îq¦—"òà9bƒ’¸D0ÚÿñŽxì `’Ò•..§BÉ)NgÀ)‘[Á(ŽJÔìÔB*]žT§JÕªZµªLüàÌ3ˆáìÊ,ÿ @1Q Á`GçÀ \h‹qŒ±b‚ÎðÂÅd ¨lá&U°ÿÐ8¢Rž”ãFQÒkù¢—*ž˜ï6T_€Eô¿Z™hE/Š+Q Ã]ðòî“n@¯’Y_I›Ããð¥TLø^Q‹˜Áæ 0†‰¬+ð°Îq/„]XA„EP±9¤äÞh™ŒgLãÛxÆ/ó --- NEW FILE --- GIF89ao% + ˜¦.˜¤.ox"37˜¡-fk|ƒ%4ëì³Î†­ÒNkíµØfkmµÚvë­³7ôðí¸ä–kî¹è¦«îºÓîâ./¾ PØ÷S †~*æˆ_ƒ¸æØü®øäŽ /ùðÇ':ç©7ïüóÐG/ýó¬äºZ?Éî 3|ßN¨þYƒ‚ Úa‹}6Ùp¯m¾6iïž6ØgÏ-ÿüJúñ •†Ç‚ Líý÷/O}\&í€1û™Ìˆ@2Ð lÙÒ&HÁ Zð‚ ÆÂþk…{a f†áË¡wÈÃúP;ËEYxñ‹åM< ºW–@ˆ x‹[ÛzÖ5šÅ*V«ŠRŒ–©˜E.zñ‹Ô2W¸ØEÆ2šñŒhLã³ÞÅ‹}xG™’2hw¬%2ñxUZ• Sõd£ê# ùÇ@U>ÁF"YÈC2’V˜¯&IÉJZò’˜T̯Þþ“ kBv!¨Ž@¿Ršò”¨änQ–³|ÇRõbF‹õ¿k\ *X’4§IÍ Á šØÌ¦6·ÉM5) i”8GÚACP´ìÛ5¦ÀœT‚ˆCîŒ'*Et‹ûyE ÉÔp´ F —½æ©P‰KœßÕªZõª…I 2£Ì¨•g0ATª¬0DA TѨZ×ÊÖ«¬% ) Ž}u HÀ^ Q«mc%è ˜à.à l \ÀÈ --- NEW FILE --- GIF89a ¯{;>¹(Dõ<•ìËX„'çY¦¸}1\.}~ ƒSA{r]y'`H|6LBg-ejqa™ --- NEW FILE --- GIF89ao% + ˜¦.˜¤.ox"37˜¡-fk|ƒ%$ JQ@ήñI¥1 ˆX<±\E£ÐiP–[€i ÀÀMÆ\íZ /à 0åäYbÊ‹˜R0©0•°0` É™š#¦6e” beÆr¦À+ZùêÍp޳œçLgXKXˆÊ&9 FÙK°Aœ”cT OL8!Ñ,T§{BüÁ.{ Úja&˜Îá«FËpŠA¼bO4ÉÅðŽw'¦t „ (K ‘x´ ªÆ7Îñ ÒH5²Ù1ˆl4ÙÍšP…3-yG©>.9 ù3%*U‰¿€]1„ gXa( yx¶ž í6ÐIºÒ—^œ0ýéPºÔ§¾éø£×„*ÈAd×¼Ed#ÁF,ÔšHMˆ1×€Â"#ϸýí%‰IÛáN÷ºÛ3 Éóhö<ò¯è"&ˆ6X×Ä&1‹{¢ …¯Èüñ¼}`Œ +Í` }펾ý.$`èöËT¬r•¬hC(AîÎúÎÀ¤õ°½ìCâ“Ú'$4#Û;6š B0À@úà/r Â/ù—£¢ýð1lQïÖáüÞÚÑ^z/ `à<`6 .À> --- NEW FILE --- GIF89a0% (4}h 7)©:Œ ,Ÿš¦¨)Ÿ´ ‚Ⱥaeƒ*Xœe)! ˜0gX¦°£Ç CúPö„YD‰Z(ÿZìƒ1ãF ÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ úóÊI”H¡õ¡Æ”Œµ˜8Yl2 ñU¢S𼪠Yxà &É ( `/à4q€Fº$©$.8‰¥ uj§ X©䠄j衈&ªh’ 9ô „Zàf$59h©_5 c¨ÌŒºê¥—¹‰Â:…¬¤N¡k ¹²:…ۥ꠬´&«ì²Ì6ëì³ÊjˆÇLq™Ûÿ¤»EÃ`Ûv› rûƒàªÛ.»æ–Û-#œû¥ Âë­ºßÀï¶èr‹î‚p  :ˆ<Ì¡BC4Ó™¥ˆf¦ÔqtbØÌæ ºPøM T€f À-háT°ÐÌÔ `PÑTVY¡MrÙÔìz:S£8µ yj$£Ó¥" ‹~ˆ%qJS£ €;b™JP³Z…QɨgMëSÕŠÖµºµ­pe«\×:;CÖÎ"Ëã^4ð£¾zh¬FY8DSðAhè aû*T5V*ºð¤‹ _8–¦}ÏC68*Lö‰} ÛRVZ†=Åa1ÔØ‡˜Æ¯š…­l3;ÛØÒö¶¶ÍmmwûלÐ.n”a4¼ }"$ P "o{FêÞrµç’÷¼èeTñW2¬ÄMiÞNñCßúÚ÷¾øe tl—™ìPI=(K~L฾TÙïèn¹>  ½l „'’BñKd×ûM --- NEW FILE --- GIF89a@$ «ÕX®×]³Ùh¸Üq³ÑxÉä”™Ì4œÌ= ÏAp-¡ÐD£ÑG¤ÑI¥ÒJ‹°??P¦ÒM§ÓO¨ÔQ§ÓPªÔUVj+¤ÉZ°×a¶Úm·Úp¹Üs»Ýv½Þ{¿Þ€ŠŸ_¦¿sÂ߈ ¶pÆâkzMÈã‘Çâ°ÇÉä“Éã”Êä•!9?+° t">Îdܘÿ,ÔY$ñAL•(©Œ, ÏÞÂZPÌ ‘çÖ€@$8`ÐëW¤(q*¶ì 56}ê”0NÄš«*Ý»_ìâÝ¢wï—#¨Úòˆ¯_Šy1c:t ½A¹F 1bìxüƒ…ˆ1~C‹Mºt*ÀT=ð!,ÈÁÖ¾'&âƒ?dÀ¨1lm¥Ë;pÏp¡€Â„ãÈ“+_μ¹óçУKŸ AÂôëØ³kßν{v à«Kˆ@>‚ƒ Ò/8Ô«‚زùÀÍ£F'²Êj`â½¶S4I 4àÚ€<@à ( h5á†v(ÿ! rX¡‡$va‰(’xa†v“¢'–¸¢†(Î8a8æˆcz ¬·"í½w TÙMz #˜+à 46C ,Œ ‚–pÒ1à £3ýÏ‘ ÿ:ë‡Î˜¹¬‹ ;›«¹æ¯¾zc‹ðç Ë„  Y8F qPÀ. ÅÖÿ°‹/Ø"ƒ¨E)RÑŠX$¢«øƒ0)q#W$âî¸Æ!jCŒŒÌ# ¾€<¶ñŠGÄ ™H=º1“kc' Âlº(Õ šÒœæ5-X ½â#Áò„JºŒ ^%°Ý Ÿ–Á¬œ‡+Š¥cábK°áÀ¥0åL3ÀÔêZ—©B½®v·ËÝî25°OjG§ZX]lÐZÿBãhGÛ~:÷¹:#ŹöEßúò+]öͯ~÷Ë_}¥«_.kÓ[ÏÛÜ3„Í@ KÅõOÇtê°„-Ñ [øÂÎð…=:U–—çðÀöJµÈÒ¸nÖžÉ% $PÂc?À°€ 6€[›ÌÅÆ£Ñ1;°A ƒAÈf at rôÑ4=à‡=Ì€µÄÒÆhÒ“VŒ³<Æ¿´ €‡øÐ à·¿! Ðÿ?tc…Â@d›Øu"æ»+û 6y à!!ò")Rÿ¼è € ô¡šñop2b9–bù1dy–;h™–jI–)ÃŒÖØ26•T©@~,LàP ‚$ébЗ€ 'ùq’»´í5"E51¹A --- NEW FILE --- GIF89a@$ «ÕX®×]³Ùh¸Üq³ÑxÉä”™Ì4œÌ= ÏAp-¡ÐD£ÑG¤ÑI¥ÒJ‹°??P¦ÒM§ÓO¨ÔQ§ÓPªÔUVj+¤ÉZ°×a¶Úm·Úp¹Üs»Ýv½Þ{¿Þ€ŠŸ_¦¿sÂ߈ ¶pÆâkzMÈã‘Çâ°ÇÉä“Éã”Êä•!9?+° t">Îdܘÿ,ÔY$ñAL•(©Œ, ÏÞÂZPÌ ‘çÖ€@$8`ÐëW¤(q*¶ì 56}ê”0NÄš«*Ý»_ìâÝ¢wï—#¨Úòˆ¯_Šy1c:t ½A¹F 1bìxüƒ…ˆ1~C‹Mºt*ÀT=ð!,ÈÁÖ¾'&âƒ?dÀ¨1lm¥Ë;pÏp¡€Â„ãÈ“+_μ¹óçУKŸ AÂôëØ³kßν{v à«Kˆ@>‚ƒ Ò/8Ô«‚زùÀÍ£F'²Êj`â½¶S4I 4àÚ€<@à ( h5á†v(ÿ! rX¡‡$va‰(’xa†v“¢'–¸¢†(Î8a8æˆcz ¬·"í½w TÙMz #˜+à 46C ,Œ ‚–pÒ1à £3ýÏ‘ ÿ:ë‡Î˜¹¬‹ ;›«¹æ¯¾zc‹ðç Ë„  Y8F qPÀ. ÅÖÿ°‹/Ø"ƒ¨E)RÑŠX$¢«øƒ0)q#W$âî¸Æ!jCŒŒÌ# ¾€<¶ñŠGÄ ™H=º1“kc' Âlº(Õ šÒœæ5-X ½â#Áò„JºŒ ^%°Ý Ÿ–Á¬œ‡+Š¥cábK°áÀ¥0åL3ÀÔêZ—©B½®v·ËÝî25°OjG§ZX]lÐZÿBãhGÛ~:÷¹:#ŹöEßúò+]öͯ~÷Ë_}¥«_.kÓ[ÏÛÜ3„Í@ KÅõOÇtê°„-Ñ [øÂÎð…=:U–—çðÀöJµÈÒ¸nÖžÉ% $PÂc?À°€ 6€[›ÌÅÆ£Ñ1;°A ƒAÈf at rôÑ4=à‡=Ì€µÄÒÆhÒ“VŒ³<Æ¿´ €‡øÐ à·¿! Ðÿ?tc…Â@d›Øu"æ»+û 6y à!!ò")Rÿ¼è € ô¡šñop2b9–bù1dy–;h™–jI–)ÃŒÖØ26•T©@~,LàP ‚$ébЗ€ 'ùq’»´í5"E51¹A --- NEW FILE --- GIF89ao%  «ÕX®×] ÆV|™Ccz6‡¥L¸Üq¹Ütލ]¿ß€³Ñx§ÃpJU5¹Ó†€’]Éä”ÄÞ‘½ÖŒ•Æ1™Ì3»/›Í8Î<ŸÏ@ƒ©5EX¡ÐC¡ÐD¢ÑE£ÑG¤ÒI£ÑHšÅDv–4¥ÒJ¥ÒL¦ÓM‘¸C§ÓOYp*¨ÔQ§ÓP¨ÓQ©ÔSªÕU°×a)2³Ùg¶Úm·Ûo©Éf¸Ûq¹Üs»ÝvºÜu®În½Þ{ ÁàƒÃá‡5=%Åâ‹ÆâÇãÈã‘É䓱ǔ§lkyNÉã”Ê䕤¹y€² 9Gp–Yw% 64.(&!B|è@°`‡B…º<™¦¡Ã‡ ‰Xx $‹3j Â1H„?~@ðÁƒÇŒéuürdÉ“(W‚IÒdLŽ,i¾¼éq¦K›73vìÙ²&L•8}*³è΋Csþ<UéS¨Muò ª•iR§@‘rêuìR¬_µRÍJ–§T£þ÷tà˧ÏF -R˜ ˆ "4dáËÃ-ˆ#~hÀJƒ0"KžL™² .2»€\¹òeÍ›;Kþ¬™sgÒ™M{Æ\Z´kÔ¡EÃV½4íɳ_³NíóîË‘a÷Î-û÷mÜÆuÛVÞšyêÍ,X Hq℉úýû¡{àƒ½0t¸¥ #“J d“F>‰¤“8N¥•@.9ã–Y¹¢—ZÖH¦˜*žIå˜R¢™f›Á¥&u×ñÕ×vÝQXá Æçuøá ƒ0b{a`A!5êè£B0IVÚÒ¤Pª©H˜~ j§™ŠZ)§žjŠj©Ÿ®*ª«­†úꤑÒ:+©·¦ªª¬»â«¯¿ÖdR\rѵ 0° |ù¥'!OdH€ „Vû¡ˆ8dÁ™„a‰C߆¡J'ó5¤Iã.‰··d'æÒ‡nºà‚.'äv[_CéÖçØ7/¾ê^Â.5÷Â{p%æ°¿ ƒð¸öþñ‹o¼™8ÌÆ£ÛP¾ói\pÈLrº¿$( âSW²'4kÐ ^øY@ ï£Ï@€†TÁ È¢²Å0tñ‹\£³ø-š±‹\ £ÃÈF/¶ÑŒo$ãÓ8G7Žquü¢ïˆF>Êñqü#éH;Ò‚¤#ßH=R}Äc!É3Zò’˜Ì¤mþ°x²@”\ ,ë4‹;E´@C¶p9€‰Tˆåß§3Ï®!GØÀô§»Ü-yÍ£žó|iºèe{Ä$]0‹y<`&³zÇì%2‘×LÞaïy»#Ç’¹Íã-s˜¼Ü^€2°RÈ#<ÀÇ>’¤ ~šÖµ`ËX^ŠYØÐ«ˆ :Ñq@Ê‚†HÇ  h ºP€2 ¨CJÑ…&Ô¡mèE+Š‚ŠJt µhP ¡#hH%zQ–†´£+E)@I Ò†*ô¦5ý(N/ Ó›Ê4:=õhDBÒŸ¶T:%ŨR‘ºÔ¦’ô©O¥Žuê”þí ’B^Hß ^ÙÄzÖóž›ãÜÎà'Là¬pZÕšÖ0œµ!m]«[ã*×·º®h¥+^áº×¹Úõ¯€åë\›×¸ªµ¯z½ë`ýšØÆÖµ±‡U,d›WÁJÖ°”µle ÛVÆNö¯ˆElaGKÚÒš–´CÇ<蓸l4È vœÕU†¡ Q8¤¸Ç5nr‚Ü0(·¸Ê]®s¡Ë\æ&Áºîu§kÝèr÷»Ï¥®s±›Üí’7¼Í=ïvµKÞãV¼æn|µ»ÞöÊ7»Ïín}ï«ßõú¿ê…}Là ®…à±2þtвíË@Ðyγ«¼õªoK-*6$ &±ˆGLâ›øÄ(N±ŠWÌâ»øÅ0ޱŒg ã†ÐøÆ8^q Büµª>.OO+/œá"_ öYÃ0q:ùÉP޲”§¼`RùÊõ99‡>uÞ³íÀ2dWÒ³È>2>•lE¸ùÍp޳œçLç:ÛùÎxγž÷Ìç>ûùÏ€´ Mh9÷ðÐZ´ ð¢;=NÌd&”û0lO4ÛsÍXr ÍéN{úÓ µ¨GMê:/ R—ªT¤íúFÅŽR°{T¨?õz×ÃîS™ì:mªÜçN÷ºÛýîxÏ»Þ÷Îw»Cþ5€Ÿ*U×JƒÀ³!ð†6Žüq)VËÃýténW®k>c—¿¦6ÃùÌØU^x›—æ2[7ìÒ›þôô)ç±¹|¦GhB±-+‰ÌxÍu.~· Cf öþö·t@&€8t€˜€ ¸€ Ø€ø€5¤CrQ,næCBJ®¦Þ¶•~˜£9íç~;ÃOapÜbL¡g;¢×‚ÖÃyÓôM/þMÐ<”×;Ï„y¨·ƒ`™’ š=á™Bš¡š«Iš§ ›£š¥›¡É™©ù˜¶™›µùš´¹™¬® Á9œôPœ¢9›¼Ií¸tu!ÊÒ’~ñù°@±a N°?‰‰à HŠã å2ç‰ êyì™1뙞ŸíÙ òÉ öYŸ¾pŸàŸúÉ êÐ òBŸðéžüÙŸûùŸè© ïY öY ñ01q¯Å¯u3SÖ)109 --- NEW FILE --- GIF89ao%  «ÕX®×] ÆV|™Ccz6‡¥L¸Üq¹Ütލ]¿ß€³Ñx§ÃpJU5¹Ó†€’]Éä”ÄÞ‘½ÖŒ•Æ1™Ì3»/›Í8Î<ŸÏ@ƒ©5EX¡ÐC¡ÐD¢ÑE£ÑG¤ÒI£ÑHšÅDv–4¥ÒJ¥ÒL¦ÓM‘¸C§ÓOYp*¨ÔQ§ÓP¨ÓQ©ÔSªÕU°×a)2³Ùg¶Úm·Ûo©Éf¸Ûq¹Üs»ÝvºÜu®În½Þ{ ÁàƒÃá‡5=%Åâ‹ÆâÇãÈã‘É䓱ǔ§lkyNÉã”Ê䕤¹y€² 9Gp–Yw% 64.(&!!Ðц`aa[ „ˆ¡Ò'ð ´Ød`A õ&–œødd»y MR<(¥Ÿ>KGŽT‚8“à“Ž4w®ìÔ]Á›–x ü²¥Ç“)“6ÁБh%’MôaÜ×/kÖž'11ÝW©ŸA˜4m&½S[¹ÿz‰0¬˜.R”"ÚkÙÆÈ‚…ŠáÈ_ÁÒÍ8¬ÉK•U¢¨˜øe^©©òeÍœÆ^ª‰É³GП2¢rÒ6 ¥&­w¶V‰´'ÛžX[‹y”éÌ–+Ñö$©RNW–ÞæòE—˜‚0PìíÛå‹5µV̸[€ìä ` ÒKì¬å˜&‡5 ì!†ˆ²(»Ö '˜P Í€ +ô* 4Õ]—Ý`…!v…Þž8ã•' ÐF mîÅÀµaXKm´ÙÆ·a$@„´,¨EDdË‚ºÒª»B+°à­¼!Z#í»ñæ`´óN›¾ô² ƒmÎßÊ‹2ÌêRÜ3»Û’ë´´(D-uÔ´Öj+®¹îÚ«¯ÐüÆw‚m§XbT,†lSŽ£%&´íöÛpÇ-÷Üt×m÷Ýxçw z÷í÷߀.øà„þö­Xg­ëÖÏ@#ˆÍ•Ž-k9d‡†À %tî¹ç,¿Ðy#à[‚·%˜.BV„!ºçފβV$ð‚éÙv>BºÇúè#Ä^Ë+x«B /{üñUX¡êÂï|ò!äþ¹·œçž;¾«;€¼ÿöG?=óž›Nmêð¾ð°îD”ð=¼*¬ð‚­—€lç"|îÿÿ WȺð…0Œ¡ gHÃÚð†8Ä!¹Ð X'D[¢ƒX/X¡-h•—ÈÄ&:ñ‰PŒ¢§HÅ*ºÊVÌ¢·ÈÅ.zñ‹`ä_+ÄJVU³•ù²¸­•ŠÒ .Ž+e.!èÄà¡h |ì@±tä!¢pÏR±M 2 ¥XÇKZq6â‘ h¤%-1ÈVdàÿ“±…-p_ ¦0ƒé>X pç „IΘ3 H'Ö©€l1SQÜ3è0G€€0` P€{Æ©Ð`RK¢9@çɹ‚|Z@¢G¦AkÇ h÷R“êÓ[ i4W0Íž”£&9Ïš¢T¥ÀœçDû)Ñ—’3£Ãÿ̪VƒiƒcØà«5¨ d0W±€Vxb£¡!¡(‹Pb#[ÙFИ· &s¸…^õŠ’0Ü¢¯HJ,à„`ìÐ뉒p„)ìÕ",{BÂp'ì5!xH[„8a 9Ø«fsr‹& N`Pfë±Y¿Òã RÐkg#á'ÌV MB¦¡0T ±ôÀÀ^#‹G0ö·X¬^IË2|œè”•Àn“pÌÞJÖp.U&äU±9ÀÀ_’ YÎ&µ½¬d©›]v`àµa:;›ØäJö!Ð=‚t«×†` ¥o /<ê¢uš§,ú¢IZ¢sÚ¤íA£aÐ Oʧcš¤<ʦ  C<ð—¬ôJpÿ¡àª%¶ªh#„Ú¶® ¦YìZ_ì¯òJ^¬5¯öÊ`îªWE`÷*¯ÊÕ¯ ‰˜e£iˆx9Y3OS<S.+ €„>#Ï-öC0®ã;ÑM1À1ó --- NEW FILE --- GIF89a0% /b)< .  …«:ÇL«ÕX®×]¿ß€´ÒygwHÉä”™Ì3›Í8Î<ŸÏ@¡ÐB¢ÐE£ÑGt”4¥ÒJ§ÓO¨ÔQUi,‘²N°×a Â[¶Úl«Ìf·Ûo¸Ûq—N¹Üs»Ýv°Ðo>I'½Þ{ÆâÇã’¦iÈã‘É䓽֋¤¹xÊ䕱ǂ „¹ Ÿ :9èê9éé: šž ,\ „eéû7³š¯‰f^}£ëÚ)kœJ-\0ð€÷έ ‹Œ<.T t°@€†0¨ž $(¡sòéçœøy@DÚBƒ2ꥩ¨rJú¨œ«z°(•†VÚg©¢Ês*•¶Î™*£«Jê­¾æJj«ý€ê+•¯Nzh º{€§Æ2*i±ƒîÓ!Ôdåw80ë–x).˜„³9l)ÿ\î´ÃN;rÉ3{?à€å½øæ«ï¾üöëï¿ ÍSW¨Á×m÷ÃZr©·¸_’kAEø É à€ ²”¨§®úꬷîúë°Ç.ûì´×nÿûí¸Ëî!r^‰%Þ{Oì÷äñ3 ?þ|¡… F?FôÔWoýõ^T ýpLS‡àï¡]6ƒÂMYÃû°Ã$d &¼Ÿ<=iQ0ÈýƒlÝÁ ü„ hÂIìï~!à F!C~œ‚÷HS0ÂB`†?¸a YèÁ~P°…yêaîĶô߉øÁAäˆøÎú d R(¤·8éG]àð¥T¥ÿ0©JI˜m5•©NašRšîô§;e)K­á‡íhÃ|Ýè¢#xàƒ1q"çØ(“ç&óP x•|-ë_IQ‚³¦u­m¥@ ò•{èu6· A[Cp ´@³@Áç¾R×¶’"ck[pY¾ž¢ 8ŸHÐ`õYŽfSû¹²v«d7ÛÙÏ–ö¸È¥ë¶ š/K]¢˜ŠÇ>ŽÎË‹O TÀÝîv÷ÜmA0›ˆ×¬­`ÿE`.¦ðšw„±‰yà]óŽ—$ ˜ ËqN´¢É|æE;úÑŽ´¢} äÛ27ŸV4ò“,]"'Ðâ ã”þ¶À)dD¯‘‚°¾" ?ëÜ(“ÛÛ`õ4€Oh‘-ôB%¡÷L/€/üÜôÀo=tOÞÍ‘W`~D¢ÿã,ÿö—ÿýíçS À-÷ ŽÂbán¦ã'4áoˆ°ŸR/)ã(]ˆ4b˜'J“(`p…Óûà `4pøl¨âE‡?à…:³6mZØ p ŽØ“h0#pø€p'{øZ¨5—(p8†€ˆ‡zx/Š8ŒèˆÚp–”xŠyè†$s‡µ¨…@‹©˜2ÿ}ˆ"\ô%g’åfädNp¡‡—&›p @A\s'&;€#4V ,,  ’¹E«ÕX ÇS®×]¸Üq¿ß€³Ð{l|MÉ䔽֌'™Ì3Î<>P ÏB¡ÐD£ÑG¥ÒJz›8§ÓO¨ÔQWl*(1°×a¶Úm·Ûo¹Üs©Éi»Ýv½Þ{¤eÆâÇãÈã‘Éä“«Á}Êä•j• ?G-€² ÀÀÀÀÀÀ +]?"4W?1¯V8R±+¶U0°Y½+UÂ1ÀÇ´¶¼¾1ù¼¨Wø.1ÍUк1½0ϸ>¶ÉZÃÙáÆ»½V¯½ÄUéÙðã¸+0Å+ÇÚÛÈ­À–oà=_Üø°Ü9~öªõ:–ÐJ®4hL󦎞=' œ¤^‰Æ:–k•W¨}• £d½mÍZ¬U¨V(»B×l•¸1ä”õûWìXqO¢U §íÚÃýŽõµâ†B9C…:ÝÛFË‹:@dÊ”:x X½@í¥TµZõÇq+ 멊¶ÉÀ,A¹‚ ,®º‹¬«°Zðé°¹æÿìM!ü°Á¹àj,°‘¢Ë«¸"$+é²ÍJzH§ÒšZm%0 tÓ+xźΰ <È̩ͬ€W–!RìPËwú -âD§:ÍÙMUpsü¦ ôI‹ô€†Ë`Á2V° @Þ\M5_P [øÂž0ƒÉzØÒ˜±ÂpP ’ÈxàÆ9  ¯?î~W@ ‚œƒ€Ïè5ÞoPTŒwÉ™ ȘCÁX HMˆäð1À€H( 0h&o‡14‚|`o$T< ;P?Ð1˜`’Õ'ã(æ'6[œ…Å ¨õPþ7‡ÐZt¨­¥_¡±¬e ê! Ї€ˆ|x‡¡q  ¡a‡y‰è‡Ì àP—a§€±ÕZøGê1Z ¨¨Š0‹œõ n8‰ÿ¹ÈŠ˜¸Y›Ø†wxˆ®ŠOläðy¸‡À膹Õ[|àh]hQC'P yâ1|âUÍ4~Xw2´ ;à p7‰°Id6/8@ƒ ° 09hƒ7i‡-šc0 p8“Ó.tƒc Y ¹ ‚g Åâ0í²Chtsn´C–†“áÙ*ÖBžÀ)™Â:åÙÛi)áÙYô+2Ã:èÙ@žèy90F­òäùž1z š  º  Ú ú Š ÿoÒ&EÓ•^™1R·$Ð1°a81Žÿv Bõèª1§D0 °:Tó¾@PòÇ hI°P+  Mò$X²&† {äRÒ ®¨ --- NEW FILE --- GIF89a@% x—;«ÕX°Ðq¿ß€É䔽֌™Ì3˜Ë3›Í7“Â5Î<ŸÏ@¡ÐB¢ÑE¥ÒJCU§ÓP›ÃJWm+‰ªG°×a Â[³Ùg¶Úm«Ìf¹Üs»ÝviyI’§gÆâÇã¹Ó…Éä’Èã‘Êä•«Á~'+4 ;C)²  ÿÿÿÄÄÄŽŽŽ ,å+a(0ÕA‹RS5P ÒÒŠ¤É™j”…A1YO%bv#Ó1]f•HǬD´²R 0`½2Ë÷.œ¸qäË·T—½ÛwtÕíæ{Éí'ßxê ¸Ò .àÖ@ !LÑŽ"PöH: p@) ÿ@ ŠpÐΤ”Vj饘fªé¦œvêé§ †*ꨤ–j꤉(¢‹  ¤jìtt°,° u°@µÆJ´€åöí´ˆÛ—¶Õ2ÜÃÆ&Ò÷ ‹@±K+ïɪΫ ,`ÚaЫ•wàà ΀Ì 18 \pƒ ¡GHB ~°„(L¡ 'ÀØÎP ÁÄé|€ C 4(Ö©vÈCQe ‡@ ¢‡8ª"¢dÀk 8 A!¦€×8O @IIÐÒ1XŠ>À€f>3šŠ¥(9`Ê£‚›•Üf+GI=(Dó’¸I Ñ1`âS“”ˆ%M‘ICü r@°­ÀC : Ð *ÈiKò0Tì¬)†šS¡âB;ÃMû€‡fáa)Í©UšU˜æÔ¨@yäw°ˆ+¡b±RŠƒ“Â"KiÓ1C› +Ó1°“;ñ€¬cÜ6€ ذŽMá¹›‹-P .p눹¼àš X50 2¼'ù •D)~Œ,‡¼-‡ÀJœcL3¯Ä\I --- NEW FILE --- GIF89aZ% ¥B¯dî÷†Ó‰F(%.,+06648Š‹Œ‹B;>> >`Ÿtì¥' ¦ ‰ ÿE(aVhá…fx u0txÿÈuÙiGw¹Ly(šwŒ|Ôµèb 2øpC‹-øÐB‹>Èð"Ž:îCŽ/Öhu@¶ãERg‚ÔÅH£42˜@‚1Ô¨ 5z ) éb‡DzИýy0#Ž*˜ ¦šýy郗<þØã“nÎ £OJå”Töé矀*è Tvh¨u‡`âv$6"Ä­MRIŠœЃ$êªé¦œjŠå œ~Êé -Щ¨vJj ‡Ž jª¢Úá«°Ö:똛惬‡’jª­«¶Ú­¶kì±È&kë‡Ì*Zƒˆ#Î0Ã.xåUÄ &œ ƒ*t«‚2œ0¬GÝ•kî¹è¦«ÿîºì¶ëî»ðÆ+ï¼ôÖ눵;L C /pðX …!ðÀÎâ îl*¡/&pB\à‰P¼€™!BÚð0¬¡ sèƒöPFd¡ÇHÆ2šñŒh,#׸ÕõÁ€¸ÅŸ%´}ÿ­ƒICLÐ>úÑýiÁý8¿>F&ðù ÙDŽÏ¾HÁúÃB¦g’ã«d7þh”>ö‡|$!(9È>jÀAˆŒDL@ >ú èã&K¹$ ô1’˜|“Óc8È•À%%/°K[²—¥#YÊf:ó™ÐŒ¦4§IÍR–»›` ä虼…†”ôÁÉ8HŒ•µLX:×ÉÎvºóðŒ§<çIÏzƳöœg7òÉÏ~úóŸ +±‹ΰ†7¼áŽîÁ µàW?âŒð³ƒ(‘„–üyà>j¶Ä¤ßÈE7˜1œ”´c5MI at 9^Ðc`‚©‰:ØZ©Ôb%1iG0ˆÓŽ–4ä Ÿ`ÇD.ÕŒùÔ"+cÙÇá*ò›¼”äp ™PhN³š×ì#MݶY!‹ÖGfÇßþú7= Œ‘„Ä»ø¨Gº’ü<½@;Ý¢ "!¼çÉ ~6¢Þøœ·$èNÆ6š^N°çn%ÐJéÉøÿÐçhó-)ýKô 7½;OïÔºCtšÍèVoMÔ´8 hO?ð×À¶°(Á >­‚ÑÙ®v>ž:Û¸óAºÐ`+0 â0KäQ¤XÛeJXþ±­ Å^ÉÆPÊbn ˈÀ6zÂ…öB NŸú7­~|"0½|  Ð/ÉF(ÈQÔ¨ü´µ^l²wšÔ–4zÙ?Hjd{šî¥Æ¥½Þ±GAR dñƒDèp :s|…ƒ°Pùu/Cp—â=PX'æAp Ãì7xã~ïZEàKürVjµVèÁ ]BÓ‡~ø‡1€8ˆ„Xˆ†˜0Cíá1Ûõ,—TAÕ @tíuTÐ --- NEW FILE --- GIF89a@% ™Ì3™Ë3˜É4—Ç5–Ä6½4‹µ4”À8”¿8“¿9z/’»:# ‘¸<‡«8¶<ޱ>g-‹«A‚ =‰¦C{”>%,ˆ¢E†F…›G„˜IUb/‚”J4;AJ$ ’K‘L €ŽM~‹N{†M|…QiqG ÀÀÀ®®® )n¢£¤¥¦§¨©lp2v({}‚† ŒŒ>•š¾¿šº.^1,a)>,654->$W)+>)6ÉËÍÏÑWÐW6 -56,>+ßá¡ÏÞÝÜW$ÕÍâÍÔè\.âV\4ôã4îISÆÌY»‘X¤hAÆP5RÄàÀ !ÁϨڈªŒŒ;°d ¢ ¸ƒæ*²[×tàR-É|Œ»B#ÞV¤V…îÄRÔ]–m@å!|‡Q-Ç·n<‚ä#’Ö¡“‰Šä°3Ò ,æC{Æ!Š*²ø43’ âÕT at cˆ;êhãsÄóŽ*ª˜‚‰&¦7c‘‹YŒ‹Éè#?šØã“î!©å–\véå—[R ¦„NW]u×]ø™#ò@I‡¾pâ‰.|@æxæ©çž|öé'žKH@&Ž)ìYÈŸˆ&ªè¢Œ6êè£âI¡tg¢™&ž¤—^:è`C$°@À‘ÄИ¤Ýª¬¶êê«°Æ*무Öjë­¸æÊê¦X°‚Eö`À°ôP¤+| ÈrÌ6ëì³ÐF+í´ÔVkíµØf«í¶Üvë¬yJá™iºJ;>ÿ@pZ’@ /ÜRñ®ÇÑϤpt, Ç4$HaJh¥ô PK4qذBÔWÇ5C-„]6/,4u^ƒ½4ÕÕm aÏÐ6ÝKgíXeϽ e@½BÝÐ8ãöÛˆ'®øâŒ7î8+t¸‚G šmf×]xá Bwˆ@L~„.:4¢—.ú¥Çºê~ .:ë B÷yÏY>3š üC£3ë´jSBˆ@þÈ$á`p*à§D'*QzRô¢ͨFûIË*T ›I)«ó*½l  •D ±F Ľ¶8Lámú(ƒ2Æ} rcíÙÉn¶ºµ=mz¿ÍÚ3HÚãöÍï~û[s¨µ¿B"BÔâ3Ìu®  ÝjÜG1ÀΓ?‘À<ˆDyæs5'ã>(O‚¨aó=>(ys²+r è'Á8yyV°•›ÜáÁš#sž×¼ã/ÈEtž§|=Z±¸yˆç ¦;ýéú‰P™*d!ì¬)°=à_Kÿºµø?ÀŒÄÆ --- NEW FILE --- GIF89a --- NEW FILE --- GIF89aE ¥Ç¤çƒ$¾°8ü-›? ¨Z@ a¬ðÊpñ‚Çø<Ùü­dÕH ! p†B !fx uv|e€S‡žpœwc akŒ!…Ÿ´µC !º»¼½±³¶Â†‚ O~ή€ÕIRŸRHŒ• z{ß ÐÖJrµ u¤áò•™€rÃC°Žê 8`‡ p0Ç€“†ûj1p‚8yáÊ@¢8¥@ÄZýÜ™IRI ‚Å ¡É€ *˜Ç'š½’J€ ÏÓ¶ÿ$~*ÍWá!Î"jýÄPæÐqŒÄ‚§-ªèØÁˆ±’kT í+ ×1ßUËeAÝG !,4-“Ç‘æZ’¤ ±«èœB7O.K²j³ g`Cr9ˆ¡åË ”-Û¼¬†ËÄuü؃ºþ™:Û êA©JËžM›Ö Ÿ€PR˜4% T$!@Ñoý°…€fáQ`ø4@Ø‚ C €³ 7à8 ({óЋŒ4 Ô\ÖŒÃÑP" --- NEW FILE --- GIF89ax o¹¡ñˆL&q–Zæµ’©t1i¬ŠúD[&-7EÒq˜b¥ùŒ’à´M›¹åÛ,ŒõZ¥rÔšÿ4 È'XØFH×gS8X%†¸ó—Viy9†©¹iiQø *:JZjzŠššJÉÙêÚÃÚ1ÈÊI5‹Xë’ûikØ¥B)¹õ†¥¨¨»ã ]†Ql'#)w¸ìË;âí ¼(ëmS}·ýÕh\Ã̘n;§ŒÍkˆüå†Ë?5þoß!lãêù)ò*¡ÂL8|1¢Ä‰+Z¼ˆ1£ÆŒ ~¼ªx1#¬ý¬\z%MäÅ“ ìÿXdxòbŽ™µËQ’ZÄ¢¸$BA‚-q2:¸èSË%OêêÉ …þR0˜cWÇ[:NšóÑó'Cw.&© Q€³hÓª]˶-[ pK·®Ý»xÏFlÉ·¯ß¿€ L¸°á‹Ü\í` iOã jC´ãÖÉ‹$ÛÄãŠBÀ --- NEW FILE --- GIF89ax ‡ÄØ4JvXË&*©BB§ÅêíhÍj·,,d‘–)›TÊMc¼ÊvØI†šS«°:˾ë÷F¾ÿc¡1HXhxˆ˜¨¸ÈØèȘ(yÇ6WHwB¢©¹i7ÉS9Fõ%6UR÷„Té&6˜éËÛYËJä Çôz–Zö”Ûã*+b¬D{'‡.P z³A´V»_¸Bw¼©ÊH1t‡ ”’ÕÕzÙLzCMÖל AË©«=<^z±ÕáÚMï®>ÖñáÕOè¨iH° Áƒ*\Ȱ¡Ã†Í¾IœH±¢Å‹3jÜȱڪca ë3òŸÉ7ê¤P¢€_°7|NÊ4£nȹÖ5xÀ --- NEW FILE --- GIF89ab2 ÁÏ¢JPÆ'á? ž˜²e´›¤¦!YÀ³'Ïÿ 1bkÔ`(€F5h°¨h¢L½hÐâhTF/dLðɵ§#º.0±‰°>5l$ö€k‰² €+"»u{’MtV¬OÉB‚áw®ž*Mø<Ìs¯Ù¹<ï.ÎK—}¹:¹ráÏ C‹KIç‘®­B Åº5k 1<ŒžM»¶íÛ¸sëÞÍ»·oÄLëN¼¸ñãÈ“+¯b!† (¸n„Ây„娳kßÎÈíaÈMŸ¿Ó«_Ͼ½û÷¿¥QÛ)š¹E Œ?!ƒ< Øê®¼öêë¯ñ½šJwÄkì±È& XÁ³ÐF`Á(kíµØf»´!)ðÃÚ 6v­ pfœÐÔšt:Ò‹ÀöúñÖ¶¶PKg0Z ¢‚^ë†Õf{Šä ¦À'‚—Ý’€¶†ÏPD‹ÐC§XÑxf㞢¶ÿûY)„K\ü· Lnu‘û[èrô¼ÿX%@REЩ*-HARººéM%W‰¯ ?(Z9âÃCY ü€¾˜\ ã€ç´7Y9 ( ¡P' ‚T~”â<ûEN*8A"Hh'>ù©)CŒØìåž(š+B#œÓüèÑÔ6u=ìn”£,VÚ/ZVóÿé|zuq^z‡ð² ´¡„‹¨w”ª`õ‚ ΈìM࿎ IðI¬Eã%AY܃pÆãˆÐ8LXRá•ßÕ,(É$BŽràÃ,~¹Ì=ÌŽÇ\å6 zƒ‹”ûÁçg9Œ…¡³rv< ÀPÉS¡®§†…y@—wfÙß`}4_ÇRØã³u.–ý¦ªŽW.ÐÑN«·ªÜç<Î"!à9ÞÛÉc ,ýàa ¸& --- NEW FILE --- GIF89ab2 N!“ì“' ®|N¯Ûïøü’Äïûÿ€$4 àEAD1¼¨z•Q |"zp,Lš´& óìK·ÑaÀ–ŸZDuáVc0«É~ öã"Åkwé¶­6A@¢ J¹²åË•E’¢³gVÌMzô„Nx^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·çÀyþ‰¦§¸ñãÈ“+_Îü …4˜p\š‘ èškßν»w"ºYÍ8W½|"¶ù^Ͼ½û÷ðãËooÍÏ©$µKØbdÀ@yý怂z²å´T ¬€@ 9uÏ1L0 p¶6ggˆ¬ö§gK-è<¶Xž ÚÙYŸrÆ(k1Šä¥óýU}¦áhÔ(ª,cʀ驨¦ªêªµ窦'iÆäw´Öjë­¸æê„P @¢á£Ý« î&à[1ÚB ¿†à…X'äß d 4î`åwþÚ¦KÂKئ¢B#öœ±È—ˆ¨m7 ðË祿ô§T­ 0¤ÇâÁóÌGX?“0ÏUïÂûúì·ïþûðÇvÁ¯±b€´«Ó°U-œ°• äI›–ì•m¼ æÓ8b@E˜É Ð"‹È3- à&Õ·>&p|KÁ§Á¦ Xÿ @vÖtD-,à¾Dt {¾«bóŒ'O&’ õ̧>÷ÉÄ(Pf@€G:a! ¨ ¡ƒæèØW蜲uèÍ ÂTV@€}¹ç÷LŒwúî"ž)tñNñ vZz¬@@P<‘±¥@¬b§>Ç*³‹í,ØñØám¶xÊÈ, {ÄÀØÏYAî«t“…ÅbÚ¨:Å0[™[,6ìÂV)4t É8¿µkÁŠQ¶žŠŒrBlVЊ»3 ™DÆ¢6áVåJ((A"؈¢)NcE)Ueˆ&ßÉŬÙagDSåØl%Å‚ÊÛ•MÈåØP̈²±[;VF#PÂ`ÐÒ"ò™³½`+:-’ÿ¡6ø'äx—þÆ3I`eèèƒ/táb 8SP4 šÍˆÜÚÄàtNèô­ÖÃËôªÇÍJ—; "ÔXýíp¯ûܳ>ßö>ˆ¥”:ˆè™¹Ù-po[Û­ö·Øtë‚c~ûm + 0‘š' 8R &ŠÃfâ,• ÆQµñ×X\ͨz¦èŠðš(ÅábÈWÎrLiê]Bt3 t:”›§ú2¸ÎwÎóžó‹tN uö¸+®1GB --- NEW FILE --- GIF89a]2 k°¯ÆÇƒL~*ìœÌ"ˆœsvbhÊ6áF‰ØÎòè Ò%m·Æ€K+۷榫ÿn·Ô•âÞ»ðÆ+ï¼ô6‚P ï¾dðõ,ðÀomØð@ ¢ÉBÀ „‘^ÁWlñr– ºe«È aø×ìÈ$—lòÉ(§aÑòçžp@ˆ[7r@Ä‘\£óÎ<÷ìóÏ>gsJSF<ñ Ô\6Ô 2‚'؃V„6.˜¬ÊqžÐ0"Db}àÕ^‡ ËÝÜéî™l`C©)]Þ À}p‰0L¢B ˆØÄ*ÒÐ…7Ìa‰HÂ-z ‡$ £ÇHÆ2¢‚hC ~pÅ 9#Òbµï@'ˆ©-¯'¬\+b×í-îFEÉ&­¯Ø§*•,ôk ­rÙ €—£Läâ 4 ê·À‘L8õµ¬îUûš~³þ}ésãÏÕ¸téS€ð€Ûù³€ú'\eejþøÇ?Q%Œ¶?¨ ‚ð§µ3Æ4¹P{˜€ ¸€“Ð@“Åq~pW50s-(  À€¸ØÖ@BuW4òa¹UÚµ6ù—‚*¸‚ BTîôNG ***** Bogus filespec: intranet-top --- NEW FILE --- --- NEW FILE --- GIF89aà â>A}ƒ„…{K>rwTs[^bC†’“jKZprt‹œžŸžs¢£Z¥¦§p]§«Z£®O ±² ”µ¶·-6¸¼½¾ À0à Ó,HPà€n0õKUjT¾P§Þ‰É¢†’(Sz†@¥Ë—þ´„IS¥®“5s¾3YÀF‚:ƒöÀ€l<%p'´éˆœTÑDˆÓ«2”XÓ*©³gL±Šµ îK® µ}µ:¶¦Vr×@.JÇ‘]ضµÄ]|sÍž\|ûü  (^,íåÛ×ïßÇs÷1V5˜°˜v†¿AT³†Y[‰‚LºôW¦6ª^ͺµëL]™& --- NEW FILE --- GIF89aë zN¯Ûïør‚•íWFp+*/>?_y‹eRSTU‚,m2~™4ƒ…@Œ ¡¢£ --- NEW FILE --- GIF89a ¥ ýýüÈÉÇþþþéëæö÷ôüüûîðíùùø—Ê4ýÿüûýù™Ä”É㲄»Œ¿Þ¥Òè¾´Ø›¬Õ”¦Ò’ùüö¡Î£Ï—šÊŽÄŽs±Š`¥†N™€;{+‚uyppl™Ì4hgáïÒÿÿÿ!þCreated with The GIMP ‚Á*&@k¼ ”ˆf¬òÊà –°:fF@éÈ4OÇA \PcÊ,÷ì3-3ô!ª5`𺠄hôÕï!­"¶MCíõ×|¦r œJÖh·G*¢Ü5ØpÇ ‡¨P}ïÌiç-`¹ôÛr.8ß69ÁÙz'^ÛÚêhÀóàGÞE˜Ÿê°â˜Ï†4ÅHîùçTˆý ìîîÈË À J 8 at g <©LáJe(Àxci—€`r¦@ CošSº±dãË`P—J¸(#›FfáÔSv2õªYè @ŠFõ˜@JŠÕ²JAT•âWŸ™Þ”Ѭp­‚¨< Òµ>S”¯$k\÷jѩԮ۔@è² d0º†)íÀ½MÆ…€‘ÎâòbøZþJo3¬‘s¦‡¸±”,8Êž>d†ikåQk˜$pfªŸyÁ »Ú†êUF§gýLÆ‘ïÖCÜq{y]ibaØ/dMì[†UgœBö —77û™âã³´_]7î=÷Ún´¤Z½mä!z«)7(/xÏr3ðºŒ=²º¹™©Eº€¹Þj~çÍJÙ^ †½÷ùvlm~³’¨¨¾;ÅRĹÇvo Ìðë %(Ž8­áT芿îš”·Æ©èÊo®Öãž+À‰Ë<òVÖûØ(÷\*pSͶ<É€yÌ#W€"÷øæ ÀA¾óÁ! T ú-¡ÝsØç–•ÎÊlþ/ùé`vº©ëN[ž–ma®ç±ÖŽ»Ï²Üfµš’hFÀÉÕî´\GðÛo¡ˆuNw§ÜíyßéËçÞw–-/pÀÏ¿C@àß8pá¿öw‘3þ€ %r'ÿ³åMdÒ—Ïc°yÎ÷¬ò¡Ïc.›~uÓlÓ! v—â¾WÙß‹ö‰Ù:ùܧ왿CW>úñfÆ©/ƶàúØïVÔƒï€}sß…˜Ø1 ~\i?–?¿÷|h¹·?^熸ü‘˜È_ßÿ]ïû'<Œ“sÿ÷.Ë•Ì6€Uôþx Àw˜+u#cÄÇ€Þ³P$ð€ì‹"*º¶xø=xiÈy"^2‚;´PÐV‚&h'u¶k*x@¢Dø‚'8 ¡5š %CN—£::1ÞÙ£R"[Ç¥Bº Ë¥ %i¤;âkßµ¤ÝpY’Ö“Pª#ºI¥ß@Ž„™¥k’ Ê¥˜Ð”`*%¼¥NcJ¦•Pj[5¢gÚ¢Ä "¥wº ›vS<ʧ´±¥š J¨;"¦‡Š¨Dš…ŠÚáÓ…kÚ¨…à §‘:HZFvj©•§±Ÿ›º8±9¥ * Z‘¥ª û™ª³¨­þê£7Z©°G×v³š x%MŸz«€ *)±˜»ª6beoÀ ÁkeW¬µa¨Éº î9lÎ*7ãuÑÊ ^Z­Ó1B Cô™­yð~Ü*üƒ¬âŠ bƒ{šZ­Ö‡ªéJ nhå*ÒÃjñŠ Ë:PX®u딯—àžZ¯´Á?i&°Q£ƒÕi°²Ñ– k äê°”Á]’kb35I±‘¡g°˜±‡ ¬oŠD&p²² ’+¹Ñì`/2#f¸#×C™d„[µ‰{Vâ¸ËÑ,ñ21(€ 6qÑX   gkp׊¯¡;««zSº(Â6í0‰q&X±),ÀÏ+½Ï ½Ó½)° »Á¼²˜‹#`!³ó>A¤Á¬q ©"“¸'p¼:³­á þÆ•‚HºgËNM×çÎx½Þï]á>áîÞë=ß]ß\ýÜ,pÏèá ^êUíì‚íÕ~øžïú¾ïøîêÙæÎèÞ.ÎhþÜ* ܳߧU«èNê>"_ÂÕÔ}¾ì,Ýì€èÚŽèüÞñßñ׎èÙð_ë~ýÄÏ›NÜs¿U5øV ?fJ"&pâ.™_ÞތާîÙþåÿnè¯ï8pEôF?ôù.ò K¥®f®+ìmÌ­íL'ç[G\¼¼Û­ìÛÚÆNZ¥JÏů0ÅaH#c`@-92 $KšAуKi[¬aÓ¶­Í8™3iÊìö’þjÒðÌ‹ñ¢Þ=@,> –ˆ`R¥K%I˜p!„ ``©ÐûÄE‘DUBcÏ=„ ¢FbËh¨&®/æR&ÿhÀ} ÐÀ™LGÁ¿¼B°Á ½.Ñõ}ÈgÍ_ý”¼ø±kc軋¸alôƇ£ó“xOÕ‡Ô _µõƒ+&0` ÷гüJܺ>ìòtè'MÉ"ðÖšNNòâºá±Vêx }´î«L^Îm·¨$¬ aÆ_G‘¥$oú¦SR œ)Ø>-~ž¢0+â0ˆËë‘¥¾â ¯”„ä†Ôš$û8(k)ã ÁFƒ¯$÷£§ž/¹²T‡Òt[ŽóF’¦H™ I£ÓGó ©’ ~IJ˚$hKÿtm ‘rº”(‰º(Í$-M!먨LõÔRãB{`ñ>‹ô õr5ß«³ÏˆGEŠ& #½PKÕf °:8 ÁP÷‹äÜþÔ¢.t%Ó?h${XbR)µR[2–HHgN"‡^Î&>NÐÆ¢jEÑT›u`†2f´F%T¢æV½a? "×GnÕ[suM3i*Ýô×0Õ?•cõp‹áŒ¬(dêS¯éZÔYç•`Ô’¾FàA‰` 1É4s3ßÄ»â3S»ø W³AjƒWGS“ÃwêtSO´¼h4³S½<À“^7VY;aàí“aG”[ ¶k 3„ú¬”uQ8h;#ò1` ©µZшbŒÔ¶f1Qd¤e¿f‡Ô87´fþÓU] “¥”Š@± ‚–lE 5¶l×Qüª¹Ôö(­qd5Gu:óé•h`` a §Îä©6€Ø[ ÝŒÂ:´sa6`Â$‡GD-ÿÏó¸Ð5?‘W:oòZ áÿˆÀ&@‡`Ĥ·eùWUBM¹®…ã%b¯l(¦7³0€OÁ#‡ËD0 , @ɨ•NƒÉuHÒÑ Yóˆ—¹¨ƒ&À7õË>¤xŠ¿¿v“d0DÊIAéK» !ØŒYಌS†& ü¹¥76z q+jO–c‘:¸Ë0–HU¢Z+À©‚IHx[Àß ÎâYDñh²œÃ0 Ô¸T°& W–}Å‘¢Õ–-‡;hô@Ú­»B-I Hˆß28“Õh Òƒ_WØ”yP`ÍN `=Ö08V«º‰£“›Ú©µ›ÀøíÂÄÇ áŠæšŸã\ÎÇ;ÔŸ½Ó›\Ã' µj½b³Ú-·«•8:‡Ëð;£Óê5»í~Ããò9½n¿ãóú=¿ïÿ ¢ h0N°¬¬¸¸¼ÄÄÌÌÐdªlÖtÖØ€ÚÜŒ’âÜ˜ŽŠ†~znªd^Ƽ¸´¬¤8,4JLyy™``Œ€œTœÀÀœŒL<óöBGKOD(0> nsw{ƒ‡‹“—›Ÿß „06¤¤¬´LR^bÒ¸ªx~†Š’ú“ª¥ÏU&3*Íj‘¢„v0Ló%Å(R"b̨‘JµE4@'r$É’&O¢L©rår1r °Ìªu+×®^¿‚ýàARGjÒÃéJß>P7zþs»JèPƒ¦@Qõ £,XK†½ «x1ãÆŽCÞã€F Æ«YéRÁµ;ÛÂýÉ“.Ñ¢´ !Ét0ëÖO34<`¡€™È¶oãέ{w8 %Ö²‚ {) VbÙgF"8pÍ„$¦¡‡"š(W<œç#ì§fNFz“¥ 2©_ CÉ ]†ÿ¥0¤xŸ~¢Ú  £ª¨«¯ÂkoÀ¤šóÜd\|È!9Zs›Žè$¬à˜šª²^hÉ ÓÝ2 ±”3Ö§¸'^&ÁÅb'㈩ݸãkåpŒ@°ž·&/¹w›çÔ|¿|u w&¥ÁR NøSþPà@ \à£âŒC^»í·›3YÛ:€ô·81m°Óæâ3õÞ Ï"Iy5P¯x€ºêQI°cÐ;ã‹»÷߃OH¶I€ÙÀÅ\wç,{O&(Ø%ÃV+³ ÔÛÁÖ¦¦>}/´c1b„þ§±ï„/ \ Žhe™ÊÍ$MõÈœæÔ·¾â{ÛÛB÷[´@Jh€L =ÿEc^h ®QˆœÀ  àçɽÉ`òCHýF2Œùˆ„"8Á w‚ˆÀb "I  ˆ™3€€Q=àXW>¨ê<þp1 „òlhËk^ …¬^ y´¬…Mì{»Ã¡jÀ Ï=;à÷J´5m³ÊƒŸyóñâXß‚Æö¾«Îs«]Íç½~ÐÏæN¬7nn qœØyÇñ}oGkÙ»0@¿éÃ<æ*Ù‘".`€ƒ‹:á í Ã/1׈G|âo5¸{:‰£‹;ÈA&ÓËíñþ§C=ê?¹–‡  ( ³2ß:×KÂ(E„àæ`ôYtŽÖ!ÅB”õ%Äëêm¡S¼®·¸Ç­ô:‘ÛÏ$»Pnõ¿CHõ.vF° X€‘äí:ãÿ š` 8¸iG½ó†Rí9%·ñûv¸ã—èýÇÅŠñ»Ç£éª_}Ó§^o«`å•^À‚hèøÛã~ïÀ¦]í̘ýìýQ;ç9úãïWÏÿqÝM÷ç×â?yWýƉÍá}_=ë´é^î»ï}A@^òœ 5˜Æ-ƕȼA|¡½è¶Eéë.èã?õL_Ï;¬ïè§^˜™Í÷`úþÍ=ÀÕ=ÀšU^‘žú ÉûI žÅßÜ-ý5ŸýžÒ¥ÞôUáM@^gy‘šà ÞÁŽ @jÀ @¡‰æ•,Læ‰Ò]M ÜQ ÉßüÑß«i -l ôí_ÿ ›Ü‚ì-À(^ ¢àBá¨`Á XÙÝÖ ¢U~åàÐñ ^ ý €£X¡iŸ¸] ü)_}aB±b+ZÍ: ôa$ÉãÕ#ð¢/zcú† U¢\b tã7ú# 2  ÀÞ\D1Z’â+ºãB2ä;&æßÞ[F­áÕµ  @Úaï9€B˜Û9’d.”I¢äòÝ*,V£KÞc6j#M2ÊMJåv¢G‚â:ÀAþ£Ò5ßC–bC¥J.¢ý=_KÊÚ %^].€ÏôãTÂeªà@îä´õ$ÇñðeW¥;†%ÆcY¡K <@Eæâ%fd\2æ 2 %R™`ÒcÇÙ ÀaƤ^b £]¾ Èååóifm¦g:ÝYÒZ>ÀÄäÐ$j®æpd ädE¾fD¡ ìÀlÁìÁ"lÂ*ìÂ2lÃ:ìÃBlÄJìÄRlÅZìÅblÆjìÆrlÇzìÇ‚lÈŠìÈ’lÉšìÉ¢lʪìʲl˺ìËÂlÌÊìÌÒlÍÚìÍâlÎêìÎòlÏúìÏmÐ íÐmÑíÑ"mÒ*íÒ2mÓ:íÓBmÔJíÔRmÕ­ZíÕbmÖjíÖrm×zíׂmØŠíØ’mÙšíÙ¢mÚªíÚ²mÛºíÛÂmÜÊíÜÒmÝÚíÝâmÞêíÞòmßúíßnà îànáîá"nâ*îâ2nã:îãBnäJîäRnåZîåbnæjîærnçzîç‚nèŠîè’néšîé¢nêªîê²nëºîëÂnìÊîìÒníÚîíânîêîîònïúîïoð ïðoño --- NEW FILE --- ÿØÿà    0P @`1!A "4289B#367 ¡ÁÑr4 ±&ÇyᢲcDF‡·×x¸9™ n9òzÃËÖJ6O=Z7áŽ÷ža°ŽT ÃdUmÂP WØæ·ÄæÙû¦¸LÏh‡'8Ÿ!Ô[_¿Ýty«ÜsZ­6%\ fžC{Y@ ÝíÉ»í!››¥ïñUË.§EïªOgÕäÏ?“H èÕ¶Á«Ö«® â¹hÕ…Y+UÏÑèQ*¾Ü7ñ¦•z±[¢ÔJ 9¦ÒêF§J)j‹Rªq6lèx:Õ¡Réøx|>›yw­ô€we1jÅ®1ÅÕ/1ó–I^Yä WI£ÕJµc­ââìyyz¾.‡Q©«vư®‹¼÷á»uŸF¾Ùç7Î܇Ⱦ0ß‘¶õ*½H"ííz|µŠÈªôuýÇ Úêaû” ÿ »m.f¶23Œæ3š(¹ˆ¦á’—3à ®+:}ŒÐüõeôˆüÊ€ ®T>S=Ôö4:˜øòl‹w®~YÉ»Ê ž¥ÚµEKçô4Î{ Ÿ¬û«‡î[¿„î h ß»>~x«à¶ML#çS9j=¯P &GWõM{QÎcá†áóV.5Qˆ¦ï"p­`Ç+:lIvÁë4Î̱áxîg‡á·Lpõ†äŠ÷#L‘./vHôûb;á;‚ÛMm·ó³É±ÒZ àÎÌX0ª¼±#³Õ™¯*0ä àFahLÑay–#hنˎF2öu@Ìú•udvd·fl ýï@¯¸ñ,Ûi­¶þcú§Ïn’DŠ'ù»ÍJA²iOèÑÿ Âö‘,"½Z›F–%FX…ŽÙªùÃ~ÙJ0,Å äÞ¬³ó±Žr•“ܨŒ—[1®s„ÊAÒÕr²ýV;`¸ä÷¬·`ØÇÐX|aùþ+ÜaÊ6ÚÃ.–´Ä½¡èú s¿ã÷mš×‹d,†'±VÒ!á£Kš): ¢BO†Ž*¨R‹~~FM¶°F5u«zqÿ óþ†}`Ì$›¿·!¶zE³³ü°Sè*Q >N`‚p½ž=øËW“T‹!‰§œšõ½a"$ìðÌ<þ€Öìþ$ý¦ÖVy®± †C@¸‰Ib—kËQÊ[f”`²!^›‘{ýÚÓño ,:×Ü( Eöòí|ä|ö ²²Áw·š~«Q!A§™Ø©bä‹z-\k ­OÐñ8v> "²7eë-‰Q'—¼sAˆÕpÅsƒäåyÂ+„™h^£ª¨G„[èÕ±PÑ—­Tò¹ØÝÓr%+:¼db–Š)0í¯LX5Ž×ˆ]1Þ³—kÛY)å»dÙÇ0N½”@¿)·ì³ #FUJí#“ÚFérl§œ†¦ÖJÍõÅŠ¥&È,ƪS§èÐŒ™Œ|â"xš‘N—R[i»"¹Dc¶>yæ&~ )5ßzÞ§!Ïä2'¤%ìF)ˆ¤cAŒñN²;n‹S€™&wììõõÜxç.häMÌC\}"ÝÄÒôƒhÑ<¦Ë×êìd4½<‚EÂôw™²UFq;È„f€Nãihm2·UÔQ½wQq—ë\þŽpÐ$J9œÊþ Píuݯ©ÍIåVÙ?…žðU:ÈËdG‰%@j›c at q"Uk äwšƒ%â/&ÑÌÜå†ñážà©–E¬Ïaù:Wå¢Y7빜ê`¸=BÆ¿ãZÁèòFBàÈø6«ŽÕÕù„ÄOLخԛ% ¸3 ;1‡Ï'µ¬½zp­¥Óù4âÁj—+(G VÜz—œc¦!°§¨áÿ a~<^²cêC}¨Þ+2¦…#¼Û,ȾËÌ1 '>åÇ?§ëÃÊÎúKɨÚt£;J“ 9 cíŒQRšÏs…úèõÍB±8(Ðòš¯Yª›Å ²‰³)¿™ÀAŽ/¹D5nO§ˆ8 õŽXåÇY †ã–9ñ˜˜Á£?– •,KrUCí¬ÄÀ> 0:a–_¨Û,ñà žS(?…’¿˜ÙÀÀåñm²BRO›×Îܶ »®å«|qÍ ëºýfb˪^[ƒŽ8D()´0Í ú‡*o"ph at BÁž`PFp6 &òN b–að]$ §ñùbª Øqö ¨[! · åâ2¡c|€D"a’ àpKý/X\î%XÉ¥í¶·×"$¿]N$:š„~Þ¤ÄòÇ. ùN#‘|HÀ. —àR“y2EDËâ! ifX­ø¾"‘æ…õúKjÛ)-¦ÚëÅÂìj8˜®H¾–&sR¥vš!Bþ©WÚßÍ,'q$`À%C ÖrUd‰Į̀x©çŽ.½’üµC¢,2˜%…ýx†,x ”:g<¡ä¦ ¨ü˜ ¿#ª *uÚ ‹}SPèX›•|~¿¯C¨‘-чQ@ºà/¾nã¾ø;ÍñÐ/yè»”€Ýd¹Ž?¯Ë½#Ô™¥Fâò(¨Ì÷+€eµhö¬±¬Úã°RŸ®iõìlü^ý abyÌX¿œ†Œt)á„ë!2˯~|}ùë³ÇÆ ”çPØtMH¡ì}ý¾Rb}“Œ¢ØªÕMÐÃ¥½¸waR®í¿È*$¥™®N›Ü>»©d® @ãÒšñb<(.˜5˜ƒf'>OsÇEŠIlEã±Ë‘*LÑÑâB¯4Ik[5Áæ›k)¼X}W%1/U~yãŽ\cÁƒY—šÙ‡’ƒ 9 LÃÏN"*‰Äôâ©…úçŽ2âm‰oöœÝªÂ²·¯kd¿ T¯ǧ×â0Ù —ž™“us²ãž<öækÅÄ#¢í…$²mœWcÀµ™ÅC3D¸Ù›qKõe¸ó™‡±*©âí=‰D˜¾ˆ½mMüL<â—*ÚYö4:ùRQÿ ÏA²Ï•ÕžsLy+ùGP¿AiùÁÀ.Þ¿ºþ|æoå1üZN<§²†`ñf›ÀnlìvR'ŸÝì{ ¢Lrƒ)½I­+­F‰ä˜‰]ÞÁw°¼˜ô†jmŽÌ‘ºjÈŒäÚ™)çYg4 H‡£¨JSβÎh[iŒÔqÔ÷ë —$M³H¯;%ilÔn¨ývHôû‹%êø¨×TxAЄ3Ìðü6éW”ØŠ4ðÍ…Û²™÷\ÉHõN=:Á}FßÝÄ8øøÇžzçxòøé¼É“£$Úßüôð Øn‰¤/ÚwŸnzXmà7ˆŠ\ñÏr¹’  (ÛÓÍZèŠã&ƒ¦¶ÖVCrIŸá÷´ƒ'ÉÐħ ©YÊë›rÍHµÆs‰Q>‚ÕüÝÄu6œó‰ŸÃìâ /·6±¾+ÇÁí×õëÛ¯n<·Û{ùs!I<âB”Næ)Ö5Lz©Gu~«ÚÇÓÎÃÇüÆÉµðôŠÏTA¹“ö UÕ—•ã_ ’•"*V ±6~†—‹ò ¯¾£ÉC8gˆ˜üŒõh¢ªëÅͪg^EPêžSÇÕÁ²+@™6HR;ͲÌe=±Û®=åh±Õ*Øyjg%Y¥ndy6ÐͲë{è=mY,bIÆO‘sÏpËâNCɺ½Ž8ñÏÞ}¨´ìºÌÉ“ä÷œÀó«ÎL®·ºèšƒN²šÆŠy´"&ÄÏ¢‚@D¡¶T+«'äœñíÏÄÙ’#¸`‡ÃßÉ÷ã¯ëЂ„ÀNm¾eVf¬¡(½f'—Ò¬¾ëƒdHªReÏ‘â,€ãÃ<°å5pÁ<ˆ¹JÄ1Bë׿^ý{õýzþ½ l¨r‘¡œ¦ÌòH2··µ§_‰¼žŽ™Çô•@µNÌûo8š²[XéÀÏÛÛÈÀlð躱€9Öw0y ×}³x‹ÇB»ŽeÀîƒu™áÅä±QÌåù È„-ÆÉ¾ðÎ8¢oéJpÝõ¡ÂÆ}±&V‘ô± <ã—Oå—ANI!‰ŸOs*B°ûKZŽƒ+Èì”'ÃIÌ?F ( Ëh¬~ò·ÇßWG{ŠÚRl83l¸ÔX§É;Í–žîS‘bäE6ãœÚ[J‰ñIw$·c¦±äu_S—ä¼ ⊠â|ÜO(äÇ0ºŽ¾W<ð *gLI+ Çf[žˆŸ˜ÈJª‡–”>t¡Ó¤f´ò‘fT,ÙiôBº±4×ÓÈóÝ{çàg)1 ,y³ÀÌ’¢jžCMÒ/ò@K>2R’‚“æM2j›Æ3†‹f•Ìý 3¿±j¡óÏ<óè ”Þ•‚0Cð#ñ€q³—7c8ÚÛÐâ +ñ¼¾¸úh6Ì:Ÿ‰h¬ÒÏö®-äSuÐåúÈíÜÚtpuöÏNU ÐÞ‰¥TòFמ­FÈĪ“õU¥rH)nÇ!×Z÷ ÆxáúŸ.8d]rÏ–3 #²šè¿ƒµŽ7Ù-ÆÀêGESm°H–“c¦ŠQ¥ÖaÄu !¸CÕ$'h,ÖÁ£#œ3èhƒ‰A„ýn ‚”†‚”Ø´ye–yz/Û]0ÞÖ›™®A¸çŽxúnvÿ K.T÷F¤v9"‰ªiëýB`\ýñùèô¼,ÿ ܈¥å(¯B+œÅ²™ÃI™À!7¹4ŽT… <ªLÇE’Ÿ˜p09|UÕ‘ŽDQÉñb¸ù(\0À<=vbTåRBòÜ|qÂ!N †l_Ô:ùƒb ³€;¨(Y6ÑñÜ„ ‚Èåø(›Ç劬\ 2Lÿ Ôsöä¸ †"‚PÅË‚?Þ òðX©ÎKdBø fÑÚÀ´­¶f Æó‰@¾º8¸€ ÉÜ”U¼³€6)‰ùÅ<Ž ,ß-‘[¨¬\­ÕÇ»M¶`Ã…ª9WÓ<êºóͬØ5M=`Ÿ¥M<ûÈÞô¶£Ây3¦²O‘,>AfÙSýan<ë.Öu‹ã^ZødX-$T¸þ"MÇñ€UœÉ þ[Ò“²‚ÔDSêS¯7tZL·&&Ïÿ , óÍz 0cF[•EáU£‹R¬YÒáBè2tYàªíŠÐ"©òèQ"}ä ñÂ}1ƾ¢ä[ Âík/¶Þ/ s«*âHmGÛ5•“ñIºgÔd$ßÝ™]uî=|¡ ¹ÌTbÿ "š/JªcȈ>ÚgÐÜ«N”m3ˆG•T Hi êˆV¾)Œ†lº:r;• %}¶ò /)¨‰Ë+]v˜`ÄíÖ8?K¼Ø¨O„ù]hŠ¢ßËL.y.:öçãöç¬CË."(œ‘@N[LU%£L:êT§É%•údÁbæÁ}W¤¥^]‘ªãtÁ¶çC ‡B¦ ‡YŽ¿MŸ\ž±$.]”>} ËZÉn·9Kr©<“ù2Ë<\µ„ãÚ&äŒt¼s”ˆò¡Ê%fÝ¿ ±: ÍmªÌëÂvÚ,ªâ-EÞvyÖ×õMÊmE탷@º*ek",ùž÷8U}ÏZ¨E„B´”÷Æiyx;’.cÛ+Ó÷<_tâê5Qit¶JÛÏ5&ÕÛ(Ú~ˆm”z :›ieËÁ¶®¿ÂóDYq#¦6¯j ƒÌ›®ÓÓÎI¹ô²ïì:Zjp©5«-Ç›‘ëTÕß媥*T»&~¦Z9G^Rí»¢ÖëJÛ@Ô4-ÕíwѺ©>CÚc- ]hn±jö È0ŒÉê{¬Ú—4å‰ÛŸ¢p)³O毽3ŒöRê…•±=½ö²°°…g>E(–Õ÷½CmëÕXÚŸDlÏ`ÌMzW®ÜM@>ìTó—ëZue‘uÍí"³Ý›F)%ÜÛóZƒè^§SÏ¢&¹–?¯±nµj«ÜM±4dd–êGΨ§’WO¨E-T÷(©'#‘X½Ôy¼ Á–â©X—мóÆ<_BbÝõ¦µ £uÃçûÁã +ÅÅ›ìUñÚ#©>ƒ°Ã)þ´Î0þž·­9¹~„ÞNÃŒUx;·KQ$µ­T=p6¥Íµ-½ I(—…ÌŒr [U–¸ýÌ£/)òÚÛ«?-lb³Y ± MU\·cEšû%§Å+%p¸uŽÝ$k¾ôrùÖ%o»5JÝàûØŒ¦D›{Y×#×|Á0^V*üSš˜·ÉqôÂÈõYæmaW8‹·òš½ö»~= aAóã>„LhWµðÁñµí­…´H~ÕΗ*:ƒç&þX‘¬ŒEm ÈNôb–Œ˜øÝ 2.‚·\í¢Si oº¬D€œ:¿…”MÔ%ÿ y^½ÿ é 6ëuòû§ìXvr]”•s'¯ó{Иø®k—ãÚ‡Aû°’r?P{€(µ¦^P‡ è,÷a¾òe §”øûÚìö-øµÖ¬åf÷ åËS^‹' iÑ>M¨Õcå¨3,¸ÇŽáý¾½¶‘e"ª›Ç$Å@BœÅMã÷¹-mR at jI½?llIÞ/·»V3d1íY1û{µc6BLç-4ÚStXú“½Wivô­)¥½¬tÕV >GtÝ¥âËn ²nªâÙ€Ÿ"–GlýÞÑÄà×?u^ÏÏ]¯ ®wQý[ž¯³î?ÜCöp1Þ#F£}2÷HÂûxwNÚL«^Ÿ"hÑÑ4J—‹fôcC•B~ß×r5€Ž©WxVÅâ ™c«ømÓ¸žjx'tF÷®¬Ÿ÷n^RfÎväÃ¥ZÅaw¢ÛÉ1ôGƒ¼ëwÁUõECeÞ7Yó ñH¿æ.vyĶéË9ì|Ù8Í»?¥’û%&Êôµtf¶ô¹/ìjoJk6g;vѤ­VÖΆ~×'ì¹4í.”C³í¹nÍ¿7º5©Í–¸2ëÏÔoB®×·&Ùn#3Ûý1¶+¼(HΙ†KÔÌ(ÃÖî¡­õâ¾½ÊóNÙûMUií8Ñn˜mí±¾½w*ïHæ¶âýyRùoh·š¯VHbœ@ÝmŽ"Iª;NÑÅìWØ–´:ïe´|9ì>²¬liN­Þ’ôÎü·rBê²e¿+.6ÒlæL4wÖþw‘©º›E–`öÏY:Å­Úµ®w2¦D—޳Î÷fP [ý±ƒ›7¸Ïå6b«÷Ht‘t¢¤ã°5Ò3šÈö6ÔínÕm/Š E=pÙ’…ì™îLÉ#ÚhÚÑûI«w¦Iv¹"{•×x&ÍÉÃ[mK"¶>uë6Z7læ²ûé®r‚^Üœ²å$Ûw->›lü³ê.g@®ðghådp¼Ð<Ží+UÍyÔmë|Vä¬wYlF¸V˜&¢ÃÞŒÂɯPÅ͵reß´}—l›½ønžB)(mŸ²QÔ¦võ» H%ÅÚwl®¦lzæa†áÜÉr0§ºABYt.QÊì^¤SŒóÀ<7…°µm“ìS²¾ˆp¼b¹eív†•ÊîvÖüPFcÅÓ¼(§vοߔó·ÅTÙÖÆw%Hì3[ô¹ú^°ß‚g (tº[LvÖûvˆ&Ó¯—jžŠ,Å>»¹-73ÞØû-jÞ25áëvE¦¤:ŒÊÂÚ®Öçm¬8ø¶½õ­ÿ Ûi}îÌѸmN2vM¯XwH]Ã4ÆËêFs¬Y?øw–^W‹ÊoXÉQã[ÂnIÈ̾Ùx¿&Á¢½oÕ”Ø9[¨zîšÙÍ /môºýc5ÙNYV/e²Ò D-Ó±ØÕa5RÕ:BN‡ Ê)åø“QOPø;‡Æ4w¸·àí¢bûdÕB6omS<^è×å¸c±*i¾Þ;T޹$kÎö1Yî=ª×t–¢†êÜ• ~’ä ÑÉuR¦G Êl¤óôoäM|Y¶O ÿ ZQï˜ÙU !c)0w芫ÉíÇ`ˆŒ¤Ö‰zo‰Ã„Ӊ©±'7«ä+µÆ„|Ѽº²>¯÷öÏ´No]_X&ÞBìûeœ•,–¸€ŒåO=d €]ŒÎ(—‹i¾H‘lv*AÖ#-HòK- „Y)%- 8ÃE¬hÑ2eË9ã÷[¸SW<›m6¸¨ÇðCL ØCFTK8ßCQQñîñÚ+Ò¾ÄÔš 6«ËÃau!èÐнø\¹õ:P•chQmŸ^3;æÇZX £²ûƒÖŒˆè¤\PÅŒdÖÍØëXêBej¾UßõMɵ»Jä!fÃì3ñJ‘ˆSÕp솛þöŽâû}ªžÖ‘P,6á»oäzk³š!°ò mUñ3*0|ý™ñÖ Ÿ$[çŽe=N•ºœ±-Žé®nÔd]vèE:ÄOø÷5³6¦«i-¡ò&ÌäF$xËۋ­ôBVÌõ&‘¤iGdã_êñô?”kÍþ+Vî¨c¯k縮Ìá®>ßè: 8~Š0\`[¶ •£-”G2”ggáÁÈ,¾$…ƒ £í_I†Ê“õùÜ}4Ã!ÓëãQï¼uäHòœcµn‡v6¬jþÝüïËm*î=4kàm{o­yj·ÐÔ¿¥ï€¯´pŠgݾ=Ú+Ø’Ë9A?1J<ñÏsÏA07)Lõ% ì½Â§´y¹a7÷qî³® ööª:ÜñìpÉÚ_L¸ÛMç‚Ùíæg9Vã¯íŸU«•›ײÅ¡ÇRriøíX§"µÔƒç–ú‡bÞPË *crN7U‰.T­°2uî@×” ƒ‹j;ŸÙò•iíÊ8å\ƒ+|Zš_N½Xl¹!¿f{xèôÚiÓ¡}˜VµBV¹©ð™Ü‡´¦ BE±¸’a±Óz¸ œ8¶»óW̶/J½¾Ÿ?ºf˜]꟫ˆ ^^&¥x„­ôpKܬB œi—Ù Ã…‹@Ùš]š]XcåÛU at kÞyžg…XãUU +þ$DªÂœ”8"„ˆAqG:2°*ÊG0A¡wÉÛm+EÓ§»Ôæ`±Å 4’;@$žáÆŸ­ùŸt»gmIF10_ºèË#—Qƹx³¹ÐvdWÛŽ,}öø ‰óv•Î:qó8"êÓ¨Gwà±âòçqm¤³Ý)Ë}jS‡ìgÊËé {kÅÖµijÚï—Á¼7¶ÈKÆ)_ó0-Z*ÛCÞ?&‚¨%‰ ´ñ§nMÑmÏ/ä!º÷EÌñÿ Æå-.õiZ¹ˆ¢Ü:»$0 ½$2³IŒ–"9<½Ó4=“¹<·ß׺ÒÙjZF²n.míl¤hÖ=RË«k9ı?0¹”FŠ]ϰ÷Ÿ‘óDÛ–³-¦õ[¹µ k›”€½¼“YCdl’ ™BÆcIÖeVñˆi#ÿ ÑæD ®þßr'•ZTÀAÿ Š$‰¨ÐZœ 0V‘s*®Z·g“>Z^#ùu¡OšâX¼1]ÞF¦$XÂÑ ½¢Xü$4ŒÌ´ ¿‘6[^È<VÔ¬ºØAo\QO#4´+žÚ±ÁO.ÌÚ:bZmí>Š”rQ̱ý§cVv8³OãÇOÜš–¡`æ®`Šxñþ U׿ã@·µû=º¶§“ÛϦXivPòÈp¹&YT•f¤ 2ºš’iÅæÕÑ¢lìIª²[ÚHÏsp•o ÍÙÅ#4p¤(JŒÙÇäN…²6Žœ÷[ƒQb‰vžlÇöQv8*‚OVÆÑBË«8Y¯î©F¹ºeÚ¼úhj©öSÒOÀïKrÚÎ×»K°@ÇÝ¥¤7*{hG'wÑú¸ŠÒÊÚI®¤4TE.ì{•TO x[Í7ÈÝãqfECÅ£jR!á–Ø© k»¶¦¥¥\“@—–³Û1=ÁfD'äü† êA 9X š7öÄÓ"É·ºëub+\¶—j&Š<¡,Ðrÿ 9{w×¼¸ò¿SÔô Ì¢åU!·vC•Ö9î(¥dlcge5 G’;ÇkëmÄ,šº,B+«+Ñ+ÜÒedLðå)"0š7Pè»§Êý¯ån±s­YJÒDyŒVrÊëi=ÄÕ“"‚3Æ8Óì<ÑØ·Ú4×jÍLªb˜&\â)âi!‘£ÌDI ÇsªæZï¿#üŠÙº…å­¯¸{¥œ=k¹À›J±º™Ü»äÏ#³ÈÁ#ReP)§µ/ïôxnËd•Q¡•”dIáy!. ‚S>p1+N&ó#nùO¬Ý줉¤) ¤‘¥sKd‰®#Z5d‚9ašªi½6uîÅ¿tmÝ-õ-JØ êÙØÅ3Éu0ÍE‰b¸†BA',Ši«rèz÷:‡R_Ì€µŽy P¼¸‚IE •^êÞYùm©jÚM¼†7ž5Hà G>vRÊùù«ìý¯í­É´v6¯ªZÙ˪{ôW¦Öð_¼ RC%¼¡c¹³H%[¨Ù%Sÿ 7Ø‹hìß0nu ?bïÉ/µk©¬/-ÛÝÛU³º’ö8:RVHåkx"y®Ä1§^¸sh}Ëiç>©±üÃÔ7µþ¥ î(S·mÍå̆Îâ AÕ±˜O"“4nWÄÀÀ†5¦4­9Öœ¸Š[ΚÊV­”ÕG¨žÊqÔÎ:t­j)O_.,ªsV˜ŒiÎôí§ßy;¶t=Zk]CNÓî/³Ã#E,os(†6GŒ«)Ënâ ƒÙéžuê¨Þ ±¾j Ò^ÚÜH}e‰âãN×üéÕ=ÊU*ëj¶Ö”àA6[Ñ^%¹¹™ä¸‘‹3±,ÌÄÔ³1©$œI$’q?yc!Z”2êaJ›©Y£? 'ŸªŸ„Ô©ÿ âÃtÃÃ)#¸°#³gS_ažGQÿ T ÷aË…¬PT ¥G¨ÐTr4ã¡$JÐáá# (F° â9¤…ZTäHŽGë *ÄU˜…QVf ÖÐݺL¶;—N¡¸‚JgŠE椩eaÈ«+2²ÊÅH&úÓË-‘yª‹P ò¯N+kpjG^îáⵂ 3,ÈJ«0ð«§_y—°®tí.í²Ãr²[ÝÚHåKÖîÎk‹n¡PÌ#êõW!hO…<ŸÛÆ"ñͯZ3á†A1'ÑDÇÑÀ ñq)Î*þ`©¡&•¸aRhh HaÏ;0UP³ª ã^ÎãZq71ºÉ b0¹@¯²X×A‰$€*xÒÄ3L‚BdZ ×g³ŸZ–i.Jà,BÐn@ ö’&ƒ8÷òY­kB@äsd¡†¹¼$SÏvRÝL™ÅA” ÝR;«ZŠŒx‘¡»dB±€¥ É™Ï.l¾O,9ýæäºˆ—¡Ìu]b'â~ñ$F!Ô‚æÄêãÉýÛ:ÿ ݽ!˜ÆUB‚| M¿¿öŽ«q¥kuʈìַ %†áAGG¨5Ì(áX}¾ü¬Ø¶ÖÖö—~Uë«kH[Ã&­o£]Œ’2ÅMxS3²Å k‰TL6/šÛãÌý©¶vn‰ÍõÊëú|òMi¸±ŽÞÎy¦¸{Ø•­„!~¦ a‰­*8Òí¤É¸˜I=“Û!R ± ˜÷Pñ¤»ÄÝ/# «£Äð‘?žfî÷=8Æš{ÛéXÛäüêÜ.aØ1?7éàˆ£-ë4üÕãÀˆ¨þ¾0î¯êãÄàúÀý ‘éŽ-+Fž@Hñe*‚¦•.ÔP>>5?3|ÎÖ¢[Ĉ¬h¤’B0¶µCF’W4 ÀP Mžâó+qŽ›\°ŽÞìÛZEQ ß•IgcRÒ3±8ü;ç&á VKë8í¢G+œ}ùz~ÿ *öº”¶jON[;â+ÝœñqÉòƒKÒ¯HYn¯&Ô2É‚$*HæU{Á6æó3v\êWâ¢4b’Ù-à@±B€ŸØPN‹_‡·n¦†ïqKJä žÎ5½§¹ô”ºÚš¤- Ñ‘ì3–HÍGSã†*ê9Œ÷òÇWr÷MëF’GZKy…Bÿ H¾ØdY.¯ŸÚÝHÌ ÆVp««4…UIuÿ Äj`,µ%ÙVºT:”—Œ¨ )âëE:³ºõ¡¤¹c"ÆÊ슮¤ùqåÆü°’çjj?XuãId…›Ýô»Û¨©$L²-&‚69XT¦ ‘Çÿ ªÜÚÚHÏ×·éÇ( XTR©æv¹åF±m±Œ+)ºxh¦I¥Š¦xa`ÊD²Ä‘Àæ¡j‡–>\ê¾jù%š5D…dʧ֙㉥ ÊÆ5báYIZ0'PÚ›×oÝé{’Ñ€–Þæ6ŠT¨ ¤«Uu!ÑÖ¨èC£2OÁ^XÔR¾öiZó»›óœh{û¾ñ²Ÿ¥l£¼þ®“‡â@ƒÇBFúDz¿àüޯõ¼†‰:åÌ1_—ë?y4UúY¼ pÃ&ÿ Úeß–i.°X;Ý[T’ìs ¯X=$ #Ur>Òw;“\¹½}kË]É5ðšF‘n¥ÆÊó#®É™‚¢³"ÑXƒåîÁûIìÕgå×µômC¸· ×5OzŠêÒbRF‚CT•Õ¤1ø-ã)ü±ÝRù¥w»¶ž½µ­'Òo/-¥êið—†k¨ˆž*apI7‹œq?ym•}—½Z÷‘y7>êràÛ÷kÙÄ[À0¡úùüŠDÕÀ}\ˆáXá®u}Jú;k d2I,Œ#UÄ»1 (^d“‡þù:ø•HhäR*0¨ÄPƒìjâ;Á|džÏpnÄBütÀ|g‹¸mn¡¹óNúM>ÈÝ Â‚êáká‰+™CPÊÀ(kÆ¡¬ê·o>©w;Í4ŽjÒK+‘Øþó3>“ÅæÜÙ›·ÿ åèd|•‘\³–Ô<èÑ·­Å§™—w2Ï=ä) }Y'9¦[¤BÕ⑱h }„PìÍѹá‹h<«4¶V6vzu½ÄÊÁ„×1ÙA¼8eFR謈êªë›£ýe¬ûçÔZ®cô0EÐÓ¬ºžíoôEÕéu_é¦êNù¾’W ¦æ—ÚÏÕû¿Oë{½ÇF ú}x%¶—è®bšÍÒ'Ž6Ë›2Ѱâópùo¸åÕ³[Ü#E ŽͻûPÜ[\G,¡ìÌ…’¤£)$ñ}³·žò÷¥=ô7~æ–¶PA ¶ñ40‹d‚Þ3kFïôáwwšHÞgi ótn/zó ÝZ\ûç»ÚÇôÖ)v¯îñC¯Ñ%¼+—¡‘òVErÎ[wy“¢ïFMѸ%wÔóÛÚIk~dfw6/²u%ß(/K;tLd×qoÕ$÷Úb±HcŠÒ $VVÒÞÖ8a€æD%ÑŽQ »R5}cXÝ–§YÔvíÞ‡{q¦Ç5æ›|!PÜ:Zï ·…Vàe¸‰RËfÌ6ŽÍݱL$æâk»;+ø­njX\Z-í¼þí(bÏôEQ‹º3ø„~xÙï{—óYW„é Ô•šÙìÜîbš¢ÖF‚41‰2ˆ•2&]oQÙ:Ϲ^ê:]ÎpÝ&êYÞ([ˆi?ø+ÃOâŠx«ˆ?/šŸ†Ó¼¥Ñ¯ŠnMÎõœ/5Ó¡'«^á<Á#ê²w-t /[‹YÙ±P-Ž¢d‰|G-¼ÊéqÕ°E‘¢…]Kìû·”Å¢Öš$'Ð¥ÌÀz:‡×ÅÆ™°¶®—¶RUe3†{ë¥ ú9&H F¨ovbPñ¨n=Ó­\êõÜ…æžâF–YIgbO¨rQ€ Ž>οѺϾ}Eåf£ß} ñt5/{÷›§Š.¯KªŸMRÍôr½ <ØòÎ÷Xɽõ=Ó¥^[[t§=Kkh¦Y¤ë,FÝ23(É$«#V¨¬ãÈKSûP[míooyq¡èwvrmýrñ–êÂ9Zr'‚Ýb`²\¾ŒÈ„Æ]$eaÆ·ä‘:åþ¿&áÔm®õÝræÑ´ô¹ŽÁ™ìl,ìžG™`†bnî·P¶\ÝJA䥩ý¨-¶ö··¼¸Ðô;»96þ¹xËua­9Án±0Y. _FdBc.’2°á4¿/¼Ê‹uè&ÙÞÇcw§¨•™ÃÁî÷ª³Uc%26z)ªž5'ÍEí<«ÜÛ{QÑõI’9¦ha¹‡«©¼rÌÏäÅ FÌ„ç¦U½¿¿†îky=⌆Ým"N´q¼L%vWr]VïÍ»_¶¶éÛ[+R¸÷Ûí¼S[mJÒi©sa`öîl)$,¶ó+,6¨à22ÂAûfìÿ {g´l’ô˜e©˜Ž§ÙÀö~‘ú?ï¨ùXUO 5¢ã̯êïõsîà‚§Œ~ü ]ß¿‚YPŒP èÄsÅ¥` ÛÉ6¬#Ó¢Ó#…l`Ž(& f‚9q h³»‡%š§½wr¾Û å·¶µ´±Šêäí7kgõ1 ÓgU`[ÈI<ºÜ—â=º$Hó9¢[ß ¼µ8–½ ÃÏìðÓv‘¬aóóøø ýø`x[[†ú3È÷Õÿ £’¢€ª( W†(¼WŒGàp`§€Ypâ}É¿÷5¦™¤Ä¤—™Â– ®TOiØÓPIãPÚßgÍ,Ú[T¡ÕnPXr-mÂ:ö<µaÌ(æo·êÖn/õ»—-$Ó»I#k‹18c€Áù5i«h÷óZêp8xå‰Ù$FSPÊÊAãÅŽ×óÒÆMgE@oâßr¬Ë‚Ì ŽÌ-ó¨øø š±Bh‘)^áâážï\²TT–š% ôÕ¸g×<ÊÐí€9¯ ¯ÈŸ]9vðGû@]Jà~Å”2Lj;3©ñæËé‹›o,ü®šyiDšúU+ûÝ(ƒ1†e5å²ïFÒ4y©ƒO_wR§±¤•¹Ûãχ¼Õ/æ¹»cRò»HäúYÉcñŸÊE÷kù£§,®ËNÌ(E8ªî}@ÿ zÆ?>=¼¼Õ.%'÷¤cùÏ–$Ÿº 3ºÐ×Gæà}_¸®QE0.Ypþ¨ôråÂG­ØÃuª2?Íá'Ö1ùøŽzm/Ž&¢Šú¹Hôšp#1ãü{‹©’8T³ â¿ÚÉ ´ÖiŒNpoû74 êçù4IåÄÖV /u…¨È‡À‡øß—ĵ<Õoȵ¯†$ðÆ¿ÝϤÔþ]‡ Œ#‘¼q‘»®4ꀳš™#þsûj?Òçˆo,§ImdPÊÊAâ?°ü—“RÖ¯Veïö˜÷*ób{‡iÚ{-’04–AüL=u~3Á$ÔŸÄ–ÞfiôoD““½ã¯#Þ Ŷ©¥\¬¶R­U‡æ#°ŽÐq’¯aq®0ðB§—ñHe}Ï`áõ fì»WƒAûª¼€ôó=§ñQìÒh0ljËÿ èÀ¡b<ˆ?‘„“‡;giÜÖãšáy/zF{Oc0åˆðY˜–&¤žgñ€A¡K¼7ƒÉq`¯–5v'¬É@K}4öi†cQÈ#·¶…cTP;€ MH¨«î­é=¦•{ Û‹G·'¦ÊÓdS4ÌùQbrii™Acãå˜jhÑ5+Á7Õ¿÷KvŸ&KCþ&SàÍ›Ã_k+~ïo^Ð4ymì4™¦÷‹™‚G+1'º¬jí!ÄÕú™BŠÐb3ëºvŸ¾4NÓç0Vã¥$óÌ€uONYb 1é« –ec_Ù]él5 #¨i²îeƒé`º€¡*ÐßFd$TÕ‚”`Š‹ånß¿¿‚xµ(®Ì¬±dðAk*ø “ãoÛîiÛiY>«—J’á†_QfÈnì¼ÇVéÕõ[dÒdê©·H “Þ<Á¾ÜújZYkÀ%Ir¯Iãd%Hbè¬ ¶P…ɳ(ˆöäžWi÷Ú¤ ÒŠôQŠ¢‰4ÁÇX2­ ©¤# q [6Û°Ö4Eµ)wiA‰É Öe ²äð“\Ôøw²tA¤é7‚!”HTÆiŸ)1£=EI ¨4§‹jî}¿oÆ¥¤Í+{»°A4s¢¤]¼+"…¬e¨$Ö æ‡iAa-”jD3̯%ùIA¢&¤`+ÎÕ- at HR;y.¡ܲ)t ˜+3(j ÁM at j Ò´¸óYº¶É¦ßû‡Aó!Ïзd—²åbW75¨Ç‹-Ѷ­:¶Ô‡Q…Y W§v¹Ýxý— WeöT–b7Ô{ß\Ñu¦¹V<ÉN¤l'ö£f”¡¢ãQV§ÂÆãEÓìµ[õ~´5€ ‘Ë2I$'0Í‚ Œ@'/—û®×k8Õ4Vš)lÞhƒÉÐ$/$rÈrå%Uˆc‡‡°Ùî½[AzJéR@«ÖŠGF2‡\­í¾&ˆB‚ùË¡èÚÍ·GR‡­3#Ó=Ä®¾$fSUe81¥hhA ³eÓÖýÒñ:yão²NÑŒêÆ?u5ÏA_4ÙÚ|ûZßTÑáÓÖ»'6æD™@¤¨òfŽL¢ªU_Ò+Z®ãÖNˆ4&ðD"²‰ ˜ÁÍ3å&4g¨¢)4”ñ|&t}*PwÂúú(lÿ #ñ$$øM`òw¨„šáÄûŸ]ˆjí(ŠØ´q˜–®9ä4'€ ~DÝ꺔Â;8P³óÞIÀÓÅÆ«uU·Xc®Æù6=§àÓdzZ߯c?ξ$?1_†’W $ ±ì$ñ7ÔÄ7-•I  à F À€4§§…Ñ/w¬z¡`½2ÞËJì<(Æ£e8Œ1izœZ´-a{p ÁðË+3 M1bÈÂêxÓìnîÒ;»¦e…O9 ÌÒ'ÑÄVúÊ„$—ËÈ1U ÁI CCâ CM»Ž{)EUу+XÜjæ Ђ>½Õõ BZAb{è0ÒNÓÅþ·zç<®r¯b Áz ˜ÇÑs®T5%pSÏ›¦hbÚïwŤ‹„’yZ(màl±³PÁäwxS:ŒkBi¹—Z{¬þ©ŒÊ¶yúAº«”9“ÄÒ… ³0a@CÚêaN†÷º‰pÞÁ¸Y&÷@ÀàI°PF'<º—OPº¬©v³åÀµ²ÃUêÓöUÁé–ý¡AR Ž4½•¸í£¹…#&U©§QäiNFXg!]Jœ0¥iÅ…ý®˜ÇP¶ré+Ë3È \ž&ie P¨ÕE©* ’JêZ…‹.¦'Z)d†FOÝf‰×8åLÕ ¢ÐàòÎ?Ä|#ÐÀ¶ï"Œ:’"ÐG> »;e>‘¼3\ Äì¬Á~nÚ>Þ¶†qÉò—qêy 0øäíÜoMFqÒ„vçnmýÅ«zéÃ;±,MI<É=¿hövö“Þj kp”DV­T»bH8ªÂ ãÅf0¼]‚~Owçâ+9ä’ÂùÍÏ@ŒI €ÈêXÅH8€{Çw÷’ˆìà‰¤‘HTE,Ì@à œ=Ã2ñ/ã÷{ІNS/QC¦Ej3§5)P*H … ÄÆ—a}¶´û›è Q$²[Ã#¼”«±vBƬM*Mg懧AVÚ~³£¤»2t‰©‘­Ê©ÏFÌê¹^ ²ŠñåÛjû`éº|[’Ä0yã•䜳S§Ó¨é"‰*ìArË•pn4ýë¢h§Qµm0ÙMH‘ʃ­×Y¨UX¢‘\ ¬H…JgG³µ-®,­ÝÞâxÌhêÌÖè•virÔ+ SúCZ8ò0Jý.ÿ ‡ˆ_Ì3/çÔ¶štQAú[”¸gþc/ÞùYæTçRŒH5Ô  ][ÈÄÐmÈí$sáü¾ó“J¹‰Q²‡—ÆÊžÊË«qÀ‚ˆ˜5^!¹¶•^ÞE ¬ AR*=Ä|=¢íØŸÅ+™œ ÕR¿Þ©ø¾ÑvÖ“UÔ.¢·…E|RLë 4̦˜ ž4=·à\ÐD­s5{›’Vg4æjä*¯ÜÖlc´_ë=:¹Ó¦§ŒK–6ä€IŽáAŒ­0r®(GžÖ¿f3Ø0hÃV¢7$2bpÈàáALÔìã{hšFëOÓ´ÏsȦÎ;‚ÞñoÔo'\“E^›øseÌ|-T5ÅNiÍÕ¶}JëÐ|Î2uÐ$¾Á[2€-®/f‰n¤f žDrûŠ®à44©ôwñ™ïñšG ½äÓóñ1‚HÈ(v ¡j=àÓ°“^Þ6îšæ’©ÊÇšˆüA{À28P¥«-„E…LP[* à*ô=„Žþ,Ÿ Â»FqC™‘kBËJÓ>RF$(©¦ Mªô›Ý-í™S ±!˜¨¥r€¡F"M*8Ò­d·rn'ÜQI'œ¥H ± <©BxÒáowŒ¼Œ ±‰!%¥zW#QP PG—ß¶2ÛiZÕ”ÒȤCS«1ÌËRY³J±,r©în}xhpMiôvöQ̰΢Ág”)ê2ÈÄ€r¸ ¢¼mMÁ³4xDs<‘À°ÀÚ`+#£`tW hVcþvé›âD?¥‡à¹ðD·+›¸b~oÓÁÄ[Ö@üÕàäÄOç¶u™c|À÷@Š-—øsÐr4ÄaÇ›Xü =t­µ=½Z’#ìé†'-0®lI¯,m#ˆZë–+Pƹˆ!HÄAZs ˆgXØúÆŸ.½î¥ÕÚ=cÓhäJ T¹±vñ(öžºzv£g¨H·FýHŒÍFg»~ç$¥£à­r½¢#òÄ¿ñúþí{¾Œ`=CõóüR&® Àà tñmÖë:fÎP­;sJvñwªl{su¦3m¹O ®*€Ó¨¢¸ …$’&eSUYX,Šc\¨ ºŸQ¡íˆµ=3Lɨ¤MTÉ+»+°fÎ]Û¨ÄãpÌ P YÈôg¿ˆl´ûT†Ò5Q hŤò ¾Ò’1€$cÅÿ ÖÓijñ¶æ¿c$,€–Aç‘`1”akM·%æß»ÓÙ4Ë |•pY W#¸ äjAãÌoýêÔ?ù®6N¥¦D±Iª-Õ½Ò¨ ”G’'`0.͈$­iǘßûÕ¨ó_smj‹„¥ŒöoÝÔ„‹ˆ‰þ&\ê§Y{G×Ì›xóÍ¥êöâÚ”©ƒN9.ržÔ—«3hÙ*ÆÕ¸yshúV›s«JG"…p7f#Æê9šb(Ô‘ùƒ·mgdꦚí9=¥ŠYÌë*ÌV€@šQqÉmwlÃj7‘jµdˆ¼$¬Ùh_¢:ŒÊ vñi…OÇËæ§àÌqSÞ£9“Ò{WûÃ秨VE4 àA„}À úÍ*}'éõ·KÞ÷åÌ^$lðËÓé¿›.l§ÂÔqLTaÆÞ×b¶®•Ÿq¾d]ÙJ®RÙÍ@8… v‘Æð‚ …%í­æ·ww‹yi1ÌÊÀîXT&lhFj9˜R4ÍÚ„Tð“$BçY§ŠgŽñý‘éæ{OäÁ²Õ úU§*ûh{Áíààx‘îmúúQj$è¾üàT¡õáÜxb‹ÁxÄ~—ð /Ùé:t“Ü“ÉV´ô“ÈIÝÐøAþ7ý¯H\=¾›Mh»Eæ\´ Uû?l¤ÃòÉIuhò™œ.Ъ•yBúž›éDÇÑhPP¤?Rœå†äß,cb5>jÙBa±$ŒIºæ.ûœªÆº¢ÝéKÝV2ïeTŠg" "aþÏõ BN2½ãÖZnd»´[Šv*ÝÊh!ë.Tf—¬âÉNXbåAê“L)@&9¿Í÷ö78™J¹I€·K»~¶¯;WI³'ŽìXï£ÖA2ýɕ㒨AêDÎ#ZªÁÄV«°ÍHÊ"5œD<[4úŠmcãX"Ý›6ä!KÔDz~‹5Ú“X¢òž%Ûê•ú%«hr^_5*®Ñ«èBÝ$јBMS$_.墊€Šž˜ÓéÕÈDzg¾åÍ'dÎlK8Zy£sãÇ^²ùUT*೚¢¡î™ –+dÜ& 98{#'"ñD›5jÝ"‰Œ`þÔDÅ‚•Ç­Êÿ Švö9ÕŽí¢.öL)åˆWÌ£dÎô‡©{ºtÿ ªz^¶™Å›Ô½æÿ  Ðrûô ctUBí0uãöÙýªZ³zë{*i¹AÊñ—h)@Ý"_z )è;edŽp‡èqLHn N5Ÿ‰¬5ž?j”Å£ÕIû±ãk§ºmÒD®Z(ªŽmwEûR©ÝÐÊvýæ­Ëh?½é\lÜè¨/ñ«mÇ/´×kq?š{ñ™QõݸA²=ýê¨BŒ¢føŽs¹/ãxÞwËÞ!è2¡§ÀÁâÕÊ”Üfói ìýº Î0îIØäÌ¥=0ìYd€_@äþCÅ(o¦N~¿nyL~r½º¯ry¬k–)"ÉÖ4+aLHçµJ†tô€d›˜Åtðè±Eq2dÚŸÒÇ-ªsYÚðQRŸPú¶¡‘RèLäagcÞ9ÞJ¶nx­JZ^Iªuõ#U]ÝÀ™!›†'ÍŒ_Ì8$øfNìuH›­N…¥±4n„f¯7©¨ø9°X½$·÷k(Ý0Xçè*Åú˜ßùo”Âã”>nq×/Ék *×úž†Zì g6ê †ªùÜ$›Iwöº¼LÒJI»;6‘nd–X‘Î4M5†/‹Ò_HN6r ^ À›8Íy^‹Þ92Çï0Pí QÓôøëljztlÔLR))+²*?šrØÂESQÙL^6UñgŽ|ÞÀã²'µ^Nq†•OȳX˜ÍuÛ¶ó)êxô6’Á ãÊäzÎÞ°,QÉuAwèUûšò‹t_gÂìgmiœÅg\Hc ´¿»‰’¦´‘FwT´ü½)'J©ÌYÁÚdoªÇA¨Eý3$Q_‡œ·ãUn¹§êœ/¼èóÅÂíS±ÕFÕ+^ªÅSî±Ð6©¢ž¿}‡ˆ"Î_‚mPYeD“IhNWÂp·;㌮ ]…]–Y³i°6kÇ5žT¯ukŒ^m¤6ͧ›S«Th¶ÐÎÑ4´\®ìÄLë¦ÑdœGV¤mÐlë·ðïlõ¸ù€°°¯X]G6^j €¬cqœL‘Õn“ÀlÜ‘0SÒO»°>§û¥Â§ðŒ¯‘è«òvÓñÚԇΔ˜|ý?Bÿ ÄÓÍ)‹}:츨6{J"áшJF*9‚MÒYà>;„‹Ç¼/t©üªQ¿6>i«|vµfø_ÌÛ†—p„ÿ ‹-1MS)ʵš-ºFbÝ@XL½@W ™_p½F›§ÕŸ"UK#Tši «!1Θ¶˜)Ë)øŠ$b™»ÄPX¢eðêJMëHèæ((åë÷îQfÉ›dJ'UçNš ÐH€"cœÀR‡˜‹NËs-_vFÏjÎotÅ‹1NË×zª±NŒœhUÙZ.ɘV¨°2É6XHs©ßÚO.Zò)Ómëh†+*¼áJâr‹@”r”Ä‹ÙuÝgÉ[//SAg]T)Òj‰p(§÷&_G—sZ]'°yUÊU¬v¡oÑ7ÏS)½dë°FY5žªPëÙÐ…üGŽþ±P¦n­—…KG¨ööB¯¾v"¨ë“Îû’mb&…m—h•2"eÄ  ðøM•8×¢ò±“D˜ånV~¬ÎÒëÔ sº®ÉH B˜G › ÷La” "c€ ª rö”„.…ðþÙ¬è’uü¨ïœ”ÍÜ„]  ÅTÂÌõ4L~ôYEL+»´;enÖço»úñéCG4:Qö®XÊ,buû½`ñð×Kãf¯gŠ´À*“ök’Ïé—ÍOvB³Šz›Y2ú¨“ª d[¯hÀ=‰üÓxÎlPèÁÐ4÷,Ñ‚o È¶'¢JÝÅŠi6et\©‡¤á2$‹õ:€ªÏûˆ†ȹuÉŽF´yRª°(ºœªÕåE8y; H£Þ«y‰CÈ8 ‰Î¸œåéõð…÷U¯¶ÿ ›¸MépìnM¿y†áö«A—Ä•gdŠÌ²É¥á¥¤Ø¶QÃæ­¤4{z.¬²`˜ªGi šH¥÷YN[º[ή:íç°ÃŸw§ápùvÇ«”SRÈßSƒÎÔ5ÖgaIQhœŸ¢ÝÂn '9“ôŠ“äi{÷#³¼öæ«v®ÏOrîFzÖÅ›ä åƒÉjåV:vf›öåïAWh šÅ €C­£˜™N‘•h f¢ÜÅàò¦™¤iZfÇSеqëWËÈ$rHΙÃG(š=tT2*À\ß‘º?$²˜…²1¬Rö%åŒÑ¼Î êó\«À•§§dkò.Ä®0lèíú€îë97Æý¢™¬4¬8lÚÈÚ¾íÓyºùß ŽRn·2Ò2ÅÒPY/í]©uè)éþ™ûqncó?Y£Õdl_™å¼h6 ƒ™ÙçN6±(íü¥™H¥WU²îkÕÆ31Ñœ ªh»r‚MÖ:*‡0¦p-{IÊîu½ƒkeñ íº¥.În Y±UQºÂÕûVDWhíp‰„ª·p™ÒT¤P†(~õ¾m:d²0ÔÜþ½!=*áSTr-9ÚÆ2/A¤%@€&Pá÷uñ©ý^ùa_}!‘å׷ѸZq¿'yj‡ËÌãÛ¹ Î#“6"ê5Q!çlÏÓ§Š|W­!¸ØñžMòc•Ú–ŽémYÍbØGÜcYfUF–º=a>‚‘Üt4˜¬OHÞ°ê\wkÒ¬HÆnü¦u #IŽô(?Ä©J¥)›G;UâuG>ýebÓ"‚tY¸‰„La7r~7q'*ÙùµSá|^ÓY¿kº,Æi—b™hŠT¬ûhHfS ­÷;-­’è‰™Ç »H S"u=>WµÞqÐÚÊœ3¢9Ð"¸¼¹ú*`4˜¢YXÜÝŒŠ@B½ ‚Îß:A©ÎÙÚ%")”:þ]*޲”{¾=ÎoœéynŒ°JÖ$ö˜kÙJ´sÞÉë·‡ŽÓf’Éœª*q'@~—’ù›VQÛ¶½Ê`*g°(|¹%àO¢¡J AE[ªX5Ò) iw¨ŠeOk{ÉV4g–©»ÿ D…Í+¦pårðAbG¸¤O1Øtah5F.­™!É,Í„”ô¡ÉææbzDUvéS Œu•>?qr?µ³s›ZïÖ MQtÒI”žE«L/n Í¶öÆtC#_YÏÃ\ô™5ظ(zx"©Š$¡ ¢j&`9!À Cå)ˆbPòý(æÑ®AIër­Ö“A÷*ΚäqÑb”†í<›Ä“! Ô dÊqéÓ§ŒRmd´eâ脦½uŒpD“s3¡®””|S EEKï"ªÈÇ6\{вF(ôéÓÅbOuÌØ­t8Ò4 ë= H¨ •;‚§}¢Ì×m Ù$íA\­åF~¸‰Å0ˆŒý×Ì ËFµ³ë.¥s´[´Í6b8‘Æ1KÆ…9džŠT[#ê´f³f«‹tŒ¢g:d0Zv»žG µ»@tÑö™¤i•:6¢õ‚>‹GZ&W·DT-GçpW 'ç ²¯ê)ß´aULräžçpÕ³†ò–u*s“÷ö1ñ¶‡‘NgB†ÉË8¦ÅlÊ¿ð¶Q¦n™Ù¢Üå{K_?¾¤;©µs{ƒ=¿be£S£l³m!Wˆ¿5»%f q1!E*áV,€ÊºieŒ£=KÆbs»ó\ÕæJ½ŽÅuUÄí&FÝóÜ‚6ö²VWÑ×k3ëPÒÖ „_X#=HT†qY5ÖÝJHWs©‹ ÖiZü¤Å’~Úöjí-f{¡ÄÎü~Ó ²/›Ë&ñ©TM‰…ŠéŽg®Ûè–ØÔá,zuâáqÓ4y:ú`võÀ¸ß§l3ÕÄF)§üƒ5´PÍQ:‰œé”Á¤Ú·ï£ '$9V{”™æßßci¼VÚÚ·\äÍ®›•˱·JQ¹}3M§a†‘2ª¤e;R)È!p+”µZÆ­ X‘q Ä&òP"Ò¹ZoV=2MJÅŽ=hksšÝ†Ò² äÙªÍÈ‘.â  “Æu£TrY:nW;'c§iv­/S·Þ[IÊWT©*œ¬õŠé ½†ue±‹~"ã…UUjÝÖYUjÚfy,ÃVoZʺfk _²{´­l€X+Æwd®šÏ™RL‰„‰Ò"i„ß rŒ:Ìè,º”,=]GÓÈÝ'Ós“2Îäg¬sÏfŠj¾tåÚ‰"™  •2zh[…Ú)txÑj†[ árY{üã7I؈UWk ãŽÒˆhô0‡px·ýFùÁì$¹#%;X° sÊÀã’K6•i)ÞðÛy uW/0?éäl_01¿q±§q´nR䑲‹bzS¤@½AЙãÌæäªI™Ê•Ç¥9z™‹±õŠS¬Çù‡‘Z«sµCúmcgÑQ£õ¡z¨› ÚU‰B"ãP‘!Jv®Pé z”!ÀÄ/¸u;1·`X¾®Kªç» uLªF7f&ûÅPñðy%bRnvADØÇÉK´1÷ŽÄPnHè6§]ü›³¸9$Î)w˜zv›¯Oþgs¿)Åì}³6ÈííLŒý®Qì-–í é2© \MvqÊŠ® A9@è?Ü,ë‰õ¥ÖsÃþ¹y=­Í7QU"f>á76çSªöÑalÞ»ÝÓú ¬ y üAÕ«±Í¢+õ¸ˆØ8¦Iq± ÑaÁª$ ÖÒx…íÖ~™Ê¡ Ê×qwa±38(@äœÂ!æ?Ü;Õ¾%ñ‘Ô´ždÍ8ᬳ@š¦Q/^ñN·²®„J}@L¿iƒÃ wJ‰9 Ë ŠÔïÎd‘1§ájj•óš%Yó•Ê.Hà#¤ÎýÑ;„ áßâüEòý~rØ»ô߲԰؉º3WR’;…Š2zѱ‹æ·´­Ù½]/±Fmòëâ‹—Ò#1tÒ.5ŠB$†RÑp›c^€Ž!„ w²Ò)$ÓÈMããå< ¶“g™4ÓD[û˜¼ú§UhõDŒ«…Ãä¢ÁeLuPê¨cç0‰‡ö{Ü\{Ó¿¯qÞ©›ñÒs*eš•#ÛHÝA©#´ûüëq!D@ÇHÊy Ä”|¹˜Ž2ÐøfA ’Tœ®#rÞ¶©ïŠÈÈǘ¢S.þ•œ;h±DLšhN€˜½æHÅý®%wΪ´.OWÀ@;½4›Z)vÈÅWWü¢Ÿ®‚Ivÿ P cA~èä*éÒ+Fxí¼J}¤ ©?FMŒßôŠõ_PÜÝN3Ê)Ò*;øÅÍu»w©33v«³cé•ÚdD]ªÜ®×7¢€¨¨ ôÜ´‹ÔÂêN}U°Ýî3îQtá´V©òzÃ0á(:zº‘ XäE%1H B˜Â û›U ß:vÁ¼cϘëìÔr—´]ǦBtWÓ?Bï]k\jüÞ$"V¢å¥(õ]M ØÑÛ(7i Bª¾9ƒ¨­¼þß ù £D¿Ku挪[ŽJgÎQæM£g9äy½DÊå/еp´Âþ¡„ÇQø€vùþÃpƒ‹‘QýCŒ•Úoë_Õê‚r4ÆŽ¬º9¹t‘rÏT¹M²9¿B2O»§@!9kÌ©¸£OWÑëxE ó²5R©ePám¹¼ŠI2«d´ß˜¶YQ: g5Þ‚bšž£É97#£cš8! ýÂ,ذb͸vñã·M»V[¦c¨¡ÌR…@ ¬iþ@Û7®&ór›HˆeÏ:Î3:ÅŠ½’®f—=f|i¹YAª‚«´`d$^•ât *‚j×yGG¯ñ›”Å™Äg’0³_bÛM•À Z¬¹ŸÍç×Y%º' $òM95Dm £ÅQf§èÜ ¢¥B2áÉ«%+•£R…cn/ÜYô”¸õ:Í$2ŠdãL ™ŸDz‰JlÓ¤5÷÷Mc@¦æ•=‹©ï-»m^¯¦Ù%ÜŸÜKJ¤N‰ç½ Qã˯rr['(¨åüãµ ñÎt›•w4«ÅÓ¡e$Svè¬it¦hÅ¢G“R'ì„h“çEöƱòCŒ|6½qŠìcÜXâ´*/l[+v¦¨üIk,Ο®Ñ­ L;Ów»š¯ÆÅ$ ¡ˆæs ”Ž[ä.^ò·¡Q²]j:5à9äé“9¬5>ˆ¼ŒZÆrPÊ$ð„Ìá±Ì.K™nù…½«2×hõ½ `l˜HÖí1m¥£Nå±ÿ ný {q%†3w:î&¥¡#©NƬeבfOŒ³R:†Œ³álTEÚ/z+¤ŸbÞ/8§p# •·hÊå"­MCAÉXís à`ØKsw¼“~’aÐz›ì ÂHÍM" [ƒó1*¤dg¾‘=Ñ™‘ÁÔ\E~ïLc Ó¨ˆùþŽqíu9DÚ ñgµ*̲`QZ*Á¬Ø r(i6ÝÞEw#zMdMö•RCÌaÓÅ~¥\b„]z­ \‚Œl at M´t4#ñ‘l[¦P‘ŒZ‘2 xã, Ͷ¶¼¡ì$E¼—ú~ÊßäWϪ6Xæmù…hxÝt+h,šÉ6θOµ6‰»Ë¸Û98îǰÜd¬º¶¡-ïì¯êÔ¦J8³j:}•ûÅVZJQ& $8‰@ãÇ~B\ß&ÿ —²Ë*¸…ïý6Áܵ,Ó4pU“GDÜYW^×ñXwR ¦rÃDÖ´{ }–I؈*œ\lvféçÖ릿½ï­4¼/ÐaÐÅR¼±8¥i— sR8¤NÉÓ+  ÐPÉ éd•v«bÇÌNO»e[¯ÃHKM>yÚœ|lS%žI;uøD‰²fÁ¹Î.€B—&ÉH‡-z—`¿\g*0/i ëÖ)ðå/i{Ká$@:@'Ùサ Ã&5½œí}ÁÛ¨§ËjrSfRš3c0D*céGÔ*}¥P k–‚’´þ=Ô¥E³Ô ÕjÙ?š62¢qXÎÐz‡¤Üä2RÙ¶P=¹œ*f[Z7ªò+“Ú™)b·Ì¼’”Ÿ¶Û$’±ÜîV'ÆvôXƶ÷R²Ï• ‹6ë* Nž+Øn]bîÊáŒsÝdŠh…ûe¼&ØFÇc(¸tÒJ*XxR.vPìÍé§ê,w×8¿µ×c,4R§% H²+Çk'·QZêÝè®ÊËK°¼‹ÒQ3•t Î ¢¥>Š%)Т?ogO»õ(•Q1|úÌêtê±EEº?˜©ª´Èð'øxËê89ÕÇ’žãÔê´”Ýn°ºzr:•=¬º³ùÚÄê/U<¢Å]ós*›#$™c¦Cd9Þ‰ÅN4jRƒ\Œ¿hW¬3,¹Ún‡¤âÝ;)fž©½—”ÖÜ™.²‡M·¦Ÿp ˜€ñâvéOàãœìùβrê·¨å¢Q‹¦?÷¶¸œþ½ŒË%1¥Ëhd‘äÛ¦“RStãñ‚äýáªmÖu$6kL™³®Eé‘Ó–MŒÌ;º€÷ÈI(Š (Bº9ŠnÒM€ ¡ˆ¡8ëÈëœÇÖz­ZѸZl†_áí2ZKÒÜ´(æíš4{'=bª@»ŠbÝ»—/å·lŠ*ª©2\)˜Ú渃ôíËbdõX¼.%ÙI¶ò±$ó$M'-&ΪM-f~Y$ã«"ʬÉ#.Ù¤³¤W~•Cã~eXÉ2j3 gQ«4:(§{Ù‰™J¹—²Ù¦V'¯!+"áÔ”ƒ“g+ª©ŒaýÆó¤¿5­²ÞªHÔ±ÜÎù©ÚYÒl‘J»ŸU¥m³jªõb&‰'¨™SJ˜p€€x³\ì.Lö~Ý`™³Î<9ÖTîæ'ä\Êɹ:Ž]†]볜L¡Îqêcõ/ÉF'l•É£uíÌø·½ËVn>]t’LŽdkµ£ &P„J54È¢„!NoÓ®ì·ÚLTŽ¡„¿¥ËeÒ"Dluw–¼~V-'éö¬ê uœ‘Ò]¢‚t»ÌUJ9{¼gœãž{`Ò²}2=ÜÄl}F*Îý¿ÃßF >ïØó?be"XÛ[Ì’S)Ï×)ÌG©ß6§ rªìŒYHb™Gõµí¦— —Äl¶Ù–PL}Sþ½Ü¤‚I÷‘{ºøÄøÿ ³“‡–d‹†ê”@ɪ™Laâ&éÍ»ü¶7ʬ~›Áf×;3}vÓš#hÆU¡$+©¶¾*ŠKš2UäPA=rª ,höä’[šŸ]ýÚ´þ³Q”Y÷xQ’+6¯WÛ²‰Ž—EÔ* \–EÇü~ÌžÆZ~Á8¯bNTɾ1WÛ´WD±Ó·ä'vr Bë´«Í;Þ¨=‘ÈZ¤àþåÈrk ôéã‰Ú~˜ÉÝm¯y}„_té¶nÙ?€o“lõ[ ­”´yÓMóGqIÀ8MÂ"Rª™Ó1D røÏ˜é“´\ƒ†v™Oݯ²»#stš^©fA"µî—hlÉÃ*®<’eø£y',ìáÝ4rw'u9šñW,å^=)8²òõZÕ÷´cîì 6+W3íÛO\­¿tÕ4ÓRY°÷,DR)—0$˜™É¯'múlE9TÁñ¶ªãAž~D×g z­Š× ÛÒlzb3Ÿ0733ÈÁWü ËÄŸlÑê¹rËigJ„¸I'öÐþ*ju´O¿\«eM ]|èÇXɤš T9ÎR”GÄ>œ^Qf­hvz|’Q̼3)‡ÙK:ãûóHÔåâY;zæµ¾+ð&™ŒéIé·”T…÷i¹rg:€ÎµvNäó‰g«ËüVãÂQÌ$„”-=¥nŽcã噪ÝÂã ¡bùx©n1;¦})‘Þn19õfÿ mž!sˆÊW¬õç²0“QË3Wlº©J= åúl·«Õ–¿K¤Òëó6ËÆÙ3\ªÔêµÈç3-–Ã0åœD~ !šÎž½t²Mš¶Hêªr¦0GMÂH°˜†˜`ÒR&Z-ÛyÉHÉé»a#ý¢‹5|ÁóUˆª+$s&ªfDõ*ßê_’Üã¿Ïù+óÓdβOœ>YøGÌ+|ÿ C6Ón:E §›¼=M6š –á^‚¤:=öj·E#kd¤‹XÏt±XãØD\Ƚ~Ýþ¢«¤SN½Ïîõ Ó:½¾ÑŸÙÓ¬°ÖfÕÛí]ÄÒ‘:¼#שD[ê­e)àS{í#¢ºi¨Q(x²Þ¯VZý.“K¯ÌÛ.7dÌur«Sª×#œÌXl¶[ ÖqUø(†k:zõÒÉ6jÙ#ª©ÊB˜Á7 "ÂbaƒIH™h·mä#%#$¦í„ŒsöŠ,ÕóÍV"¨¬‘Ìš©˜ QÑx¦Önõ ¿2‘…‡ÒjVXi{&}/d®Ç[ë±wˆ(÷®%*r3õ9†’Œ~“u]G:EÊE2*ædÁÃæh>’÷?d³”Rvÿ V œY*ò«  k<…š¬G®Ìb¢@D(ÔM>×Ê^Å’q»öÍ}ì^=a­ÌÊî•êÀÍ'{’! á J“ &€¥õ/‚3×Ò?M>?ð>àœ[g]œÎÁeÒ"õ~Y6j³aA°ž/7Iƒ²œ‰ ÐP©öTPúßýBs‡¯]/¶Þ+œxÈ%Y¨*$·ð;U';»Xkê¦r h- µ?arõ?# Úæï•/WÏ£nsÃBçUŠfT£r>¦s¢qF½gV7÷ ¶–¤ÕY©Z;+W ¸UaIB+꜇úAiï ô¹õ~aX'§“MwÐV‹µ/Ymº>å‰ÚÍÔº@¡*Ì뫊™Œ DâÅ"¢_/Â_Ýû6Ã(àYæÙ¥Îà*Ÿ§Au õã ×ù”tý4’ }æ8Ž^sVÙeä–âJ´d˾ª¿{Ÿµwa“]Ü)µyhМ”âQþªƒ¯^ÂôýŽƒþŠ¿ÒÏÌü§øÙóÏú£üÚø/ÁÕ÷.¾ò§å?ü÷Å=÷©î=çô½.ÞÏÅ×ÇøñÎëÓç5ÆþŒÏ9§X½T‹Ž³{²ìñÚ¶‰N$-½öÇTµ°°eX”Aœ”õv4¬Ö—%¥!pá2¢ËÎîvß6›ûf¼9áÆ²g\ƒ¨Ô¢óa×>“Y‡ ììnnK]üÃs ÿ ¯!>–¤\öÀj/ôë²ù´ô5¶½1‘àð¬,Mƒ[#¶È¾"©¢.P}mg˜Ú¬U:ïN ÔVlçWáVGÆM.™Êê¾{eÛll¹£ÔùoµÛ—Ðd«ô7²H4‡—«>Ç/¹öûók.ñtÙä•ç_4˜¹gt-!7µwÕÞKêuéi¿F¡^pœŽ§-µ†HÒøƒµA‘j  OÓ„óî³åjF×K¯Ñl²É&ˆ5‹Ö±ñU6QÏÕ*‡\¿4gj²öâtÀ§Ç …Á¹ßMؤåá"d«ÊÕ&1®²dSÍRDê(c@ñß- ÅW±jÜ4Ý~.€õÄ¥ª al²2²¶é5îçäç›ÍÈN]ȯî(ôñag„¸{>­®/žÒõ;&-gYÑÞ+7Ï\ä()ª.XJØìT`˜.p"ÎÜWt¸Tþ/ªqßóòvÓñÛ,Éÿ ë8ûû{d®¸›ˆ*®Ñ|ATþ—§Þn¬²ŒƒžQ™?y.x¸å¤$ËNIÉXlsóodì6{‰¤EßȺríDÑL†PH™ _ÝöZtcñg?º_iÙ£'ÔWu“ÃÛ¬m‘!@Âs\2û»Vþ" o˜óxVV)ZA¼õ¢Û$ùÁ@¥Y at 5F ã œEP[h é-ê9=J«]a8$u$ ž5„#ØÔô”*ñiOJâéF´#¯TgLï<7âíÂ;!¤JfylE—Ëæ¡3Üâf=X©: >B®â&¿LwáVæ‹lŠl” &Pàd6K¿8årÕšCTëí4K^-X® !¨S– ;“Òõ×’ ’§MÂ1u$9NÁvMÌ€PK²­þ¥øÓÇþD|ñ¿’¿=1¼ë[ù?æo„|Çò·ÏõËËÿ ÊÎȲH°## VÁ9S3ãÖ2×’SF¬Êî­ózš:¬”!Ø%VOnéÅ}Ï­ ‘¨¡×T`™˜Â™mØeÇœ^‹†h¸ë¬æµœÂäž„ÀÑ7–¶š+X’Vg˜[!ì_·tÙT°)[‚J˜O·Ï8/ê{Z5öö„)œdÅ*èÙÔ­Ð:U ô é,I0fûU‹›+€P¬¥ãZ¼DáºJ>EÕ8»ÇÚ¾ö’÷‡…Ùk˜ý K4Ž—'%5¡Ë­s‹i<ârí+6ýyGÊ.g”‘x*¨ovçÕÊ3‹xícÎð™FÓX­_Ï^R²y6e¶sÕU¯Ÿéyƒt¢%!D$+qÁ¢ëRøÚ>·VÀ²T„KjòLãh-m•9+ &hBšM؃` wå»mŸ¸tö¿ˆC²¯ãú\¦_MwtÍ ¢Œ±áaévaÍ#_Œ¯*åSÆ ÝB'¢ê¨$eTKò¢'¼w%g£> 3¼2ͪMõ™(áŽNFEÆ¡œB¢›%”÷¢Ì’Mº†2)…^ÿ Ö°êì÷6¦º·9Ôétw9;K^ȼ*“+h<ÕâÕèÉ“,2, Õ;#S!ÌìÎøÇ‚ÃŒèí_'™K&£5δÝ`,w»ý=ËX4T‚·Ý,Å$¤¬ƒq#™ D“x¹Ôršj–w>6aVN<ÖÍjÞ+”ÑÜä•ѯ:;È0¯ç¦„ ¤!bœ*q@µHPÓœ r⇡ ´ZŒž ÂÄaY|lMê…7d°Üæi(æudYÙê2÷ t´«¨×¤]“‰)GnŽ™—r±Ïšo7.:â–§o”ê“™¥BJùžÅ1UwqÕ+;¨•%¡YB9vº±é¢©K³…”l U mJßã™®aiÛí¦¾l6 2­/¦Ý/¥¢ìú‹7)ÅW’t±Ü92Š÷ Š«¬sþ‹Ûì ËQ¯lˆvÒ JMÔ-1À¢µË¥iÊ¥03Ÿ¯=?¨‰ü€ä1Ò0ö(oË)²Ž4ìë×.YÔ•”±‘¯Ì6€´ÊVál*ª™%uÝ„‘Å:@s ¢K"¡ITÌJtÔ ˜‡!ƒìý Òtí«e]©è´Mw "£¥º”=&äPå2Êu8~€˜xš¸EÊ"cn©HN‘Ìš„1Š&MB‰Lz€@|üïµdˆœ©‚ÎÜ$Ù!Pý{9'7hô½G§‰cÂHVÏaA)F3œ—A‹eL‡+Gª•PY.ÐP¢b‡C Se TÊQ1€ ’ š¶@„E»tR(„!@¥( nÜ(cKðvqŒ"_Ä?o_ ãQ¦yž À;D¥o9|•íóéø \!û{ÿ S®­’Àñ#÷¨&:î‘2¢"rwߨ¦Õ99[å¸ô5‘LíVY‘’Î"%›$¢eLΜ:QsІêb ‘ŠQQRš‰PYÊRÔ¬ë.i+.«GÌØ›I¢Œ›’ªÝïÀ˜Ã*¢gò‘WeP¢ÚaØt–ýŠ5’˜·OE¶L|O •äcS"R“þU£‰fÏΡ@ª½J~ùÒ*œ÷KòõÚüºÞ‰ŽD§õ¯§lª;X;ˆ¢Í£ú‡îâ$ ˜@bŠp‚’”Z^rÊÕÀ?|ŒË™5 ¢³Ä«±1â¢@A%]‘Rô0ClÐú‰+g·LÔb”[¾mÆ3Þ°(YX,l:ä9Ô2ƒüâ#ƒçî…4dZ8GJ¹L8)AÌs*§l“x¢(bTš9¶N ÑS áŲçK’r@;¯Zçm±èR©"©ûŽš,Z•Aê bõûh¤TükYhÅNC¬Áò`³UŒŸQ'¬‰¿¥(P $$0Aó R‡BجgQ­›&Ù«“¹WÖt£„*`²ŽÖ2Æ7S*a8Qê„”ØÁµt«Öðç`‘£x° 9váEOÚ/qÇ  “uY²~¹ˆ'1Zª¹Ì—QLÇ0— ˜z«Î-´2èºñI1lXõÛ¨Zšz~‚¨ªeK°ÅúEtí &ŒŠ)ß AtVæýOæ„H#Ú"§%ôU«b®Ñ‚ Jáš}IøY9+tÁDá((£ÚB-‹ÈcªC»dŽÀRdª+4KÚ }Eº­È$/NÐí// %ßÄG<”‹–9û–h,í‘TU+uÔ!”H=ÃdÔ ÒÃS³Å àÆb!éDPr’n‘lñ¹Êb˜Š"²i®Š¥2j§)в|ˆØªÙ°ÙUUÄ#Дœ¸ÚndÓpz-V:véc]4Î,˜.R*ªd¨Bš~;ez÷d« gv k¨»MùÀŽSf¤£ª…T¹!'k&‘݃lEH¢pS~ôåU쑪ñx­á“EOר»ž‡^%ÓÌW1ä¿Oótð÷ArÈÍä¶Þ@höå]*AžÇWQ†£ÆŸÔ0¨€ }c“§ †´GûĦ]{fçrÙ“r&’Î]¾z©Peɲj»~ýâÆ¦ŠD9Ì=G§@ VmÚ? ˆTÙ-#©¥&ŠRDYHõJ'vê¢ôÔì9\ ;’9AB¡]e ´ª®,ì%d£=xi+xu GevðÈ‹6Î;"…LTúj¤cAd»ÆJeØ5l.3D ’Î\¼|ñR Íƒm“YÛçÎÖ04R!Ô8ýÐÅ­W¯†Ôƒ6-©)R‘D{Ö)H³VAG-‹¦«HTTþ úb ‰$Û¸ä)z˜a)Ž‘,½‰´“È¥n’ÌVmÜŽ$YtœFdoêV!=E ™Ž’  p( °sÕw‡#†Î‰ _LHnäŒrè…ÉMý†vN¯õ*ã+›Ä»x¹5¶z+ ´r˜¼ÂQ1 ÍZ,³04¸ÐIg².ÕòWñlÜgÆøåÉžCkõ&jŸšÓžqoU®E×ïS «iÖ‹ýb½VaœÌ»J\òpO@~#†1ƒé¡ôÙÛõ:lkí1|yMz¹Û#ëõÙŒ{Š­›Nk'7a‘iÐëÑñ EeÌw‰¸tAMPõ;9šþz¥fšsžDñöB“k†¶WI‰ò%Ú¶û&Ô ”»6ˆä»éV+$¢©«éÊ6?`„ãõ(åö‘Ò{U£rþÿ Bu©:‡ Ã¯Ž VJ‰Ðq)‹CÝßDÅ#ÕéÛëP*tŒ1«YD„À!×»¯ìË;±k9¦OrªrLiWº½(äD Å"‡- ’¬Ý7²K>r„Ì˸æJ"O‹X¤ qK£•Žc%ÞR€Ži] (©ï7&—-HÌ"=x±ŽWWGPïÚ¶DWEÜ“æM#Kêt!;=3ϯŒµÓÈ·ç„…s?k•hÅ$Tù–> 6¨Žöe0s¸›tªgòDÆkæ U é˜æÈØ¯á¢þó0ƒ›Ë¢2Y$ݪ5öSŽAC?¹Ó'_OÏ+‡J¹*J\EšJx©µ`ýgÓ¢C5-F9Òߣ ™ts WB»B¨a/˜R³ÊÅÌI9™aPJ¦Œtsé?‹Œ†Y5¡cVA²Ûº"ŽT\ª0!Me;SèoFk>Ä_-e½É]tE$£˜vÍš:”¹HCºpDÕlD\K=j̆v®$7oP7qt ™(iDÅbª ®ÅÃv *ñ1è̼~“õ“#W¿0Ø¥ûSM1À­L&è _ÔϹfò5O’÷JG|o$˜ˆ‘ûŒÚŽ+ DÓ(£«èõL^‚"›ä‡ì7ˆùˆ§H¾Œ•dÖF9ësw í‹Ôå«”MÐÉ.‚…1ÀM»B±®Fñ(7óDâ`ÎÙ VIvæ3‰bš € ¼yÕ¸'×íñ‰ó;ˆieäÎi¥>¡èîÅÑ7lbçØæÁšÌØ éÝbv.UˆA>•²o”0:LJt氬߃¿èöbóþ¥¡r nÜ3+íg2†šl¼EÖgXÌÊOé6 d«ƒD»2M#SY4Žã°‹äúYñ÷5G¯ùçÄmFöùäå^¾ùž[—'{[JÓdI`šˆFVIÜÕƒß¹ŽŒ÷O–]éÁ«c”¢ñË~Gó{ÙÅÞœA¢a|J¤kPy~½Ç¡µ3cÓC:Zê¸ûH½O8rÙ7Ž—jÔª&å±=@ëÃ~LpG޹%:ÕÒÑòŠ‘Àe¸äm£zÄ[_ˆ^§#Ò5&6Ðó$´×I¶lÝU¥(¡J›w$ ‘=¿8ñŸ·Hˆ!JIJںH&@!N“ D P aOݸ!RnJƒDLðùþüúbái¦£’X/Ñë:l&¤(Y4ÚT íü@c(ͱú·¨zb~6&7jÝ žs´å1Ò¥¡Ö¢ª´›µ}A¬èUH˜vl3iiŽ :EB90ŽŠéùõDzˆø]lÛ™š„IÖ9кcÐZ Ô1„H‰¤áoùºK =;½±zôê!á‹Ýƒ•:F“ÙÂk:…¥ç°adR!€Çj´„ŸKv‚+ ›†êbȘÄ7¢«éMØ2ßP˜°xñdÚµ9¾;Tca£Âæ""ú^Eb7j_QÂç)0€xÉ ØJ2y/^úp_v=²äYÄAå¶¶Ï#‘"bohéÛ"‚äHâ zMA(DÌk£çJ³·š~Ì[EùÓ¸V\Z,+nÕ]ªËÊ®²UÃúÌUR<‘êˆ÷²;R(ˆáÝãé+²•”íb¿ôp±qå+i“lMý;Ô]ÅzÐJ•Ê2ÅcÍÌA@ »vÈ%0… ±Å"&qï Ô°L¶.¥3mP‹].ò2S—êàŠÏ©kÐîRs× ”âª.Fª<öh*¡…Séâ“Ë)šŒÌ~õEaÂïV¼]j_ƒ…|¤”LÖ½=]¹Å1z œ©H´qê¤MA:I¦B‰ùÍåÜ .²Ü×Ô‰µ=™ZìÂj%¸ “JH²Dúÿ •“*‡«Õ*¹•ˆ•:õDä¾wV”×5ùxûaÌÏbV•a©G¾¼ª›Ø•­oÔR)AZ)ò‹÷;n¸¦˜Ú–±˜HEyJµŠåCÐtL¶vëP+tÚ§ysZk%·ÂªÍºHt|Uœ$Ý"’©¤A_†ÒØô^3¹g Å\¦³!b¥Dz07íÓ–¦Í@Ùv{¤R2Nœñ\>sêÉÖõ–Óà6 ŸÍñ4-"Ÿ®TÚ|vËð „éwµ;¯W™…rûá.\œÞÑÉÖb¿wE‘P )ÎiˆÈ±8ŠLæ8êÊr@‰÷yI&[eyº‡ùwB‡_>Ÿw†³JÒ9 ¤rÍœ§ZpÕŽiIz»uÓ_¤´\ é›#æŠú}‡@&Lä€zx‚ fÕ*õ•Y`„l ^¯Ò-“tÊ’i5bÉ$‘)„¥9ÄE ÔÇ1Œ"#ûÿ «æš"•Wq‡r©VS¨&(¤…En£ÜtTý…ðSv˜½Åv˜:½C¯i€@ ‡ÎÎ’Üä†9™»h™Àê"¶[>ÔàꓨÍÊå,{‡ÌS¦ö‡ŽÖý°7¹ç²{ ºæOÓZAm†Ù?¡D;\:¨(Õlí’7O6íÓû~ßâ#ý‘?ýàñÅ»A“(¹†å°ª=ÝäBÉ”Þd&_Â%íUJ¢B=LÔÐϧ'U?¨¤× 8Á,¢‚9ä±*;ÜAS@î2݉¿ˆˆþÈÿ íîÙÝ.ØŠÆ8¨eIa®GKÌ ù¨c{¿3˜|üpˆUØõ½®Úª= v}†‰~P:ýÝÿ üû*ûÁ㌵s¨ æg•gÑGðôQ ÞE¤Ç¸Tz‡wTTµ¤CÓñùýÞ8 à§#ˆžñf5rªOMR¬Ç ¢µTª'Ô݇¤=C¨ô/Øì›TºDZ+ Ê´=FM $MXüþ£/lz’‡(ˆED˜@z€ŽL}E7³šãm®Û$¦¢$&U?[dÖßÌNÍÏ¥ñ$ݬ©W{ÑeÑR™¨?K³§¦NŸ§&æÕ1˜D]évx¼ÃA—Œ1}!,WrT)ÕœµA7‡‘¬X¨Ñ%Å`9~™KÓÓ/N3móËÍŽë—ÄÒè§:žòÛW]Ý:ÖôÇPÇPNòÅ^r©ºˆˆâ4oÊÛƒ+å&«oÄt_dÒQ§Êú áß7SÝüQƒröâ­ýE›úÍOꇦ©úJŽ -mjÏ[½Õgîõ*aØK¨òf«W]&ÓóÈ#¤2F.¹ r,å5DN^Ò›¨x¹f÷®SÔk×lúÕa¤\`Ö4w`íUIw6w ±¦:dºñ’ìDçEU1ˆ"C¢.î|z×húÕz9Ê,¥ÝT&|î ó„γf6(u= ªë×(&eEóvê(˜w¢_?7åmÁ•¿ò“U·â:/²i(Óå}N…ðîþ(Á¹{ ñVþ¢Íýf§õCÓTý§ ·³}¬ePõK ò–,¥šHAÁÝÚ*ö¯,W/£ÛFK0“E¨Åw%ARŠk j~ÿ ³:iç”Ùéu {:¢º¾•ZÇó¶ë²–‘wkÒn|zåV5¤4|“¯y$HÕÄP‰¶HQB åOAÚâ£g2JT!Ê_ÞR–¦ÍEwÙ^­@¶•B‡S!"ååNMBÿ *'מÿ •_PJ†sµd¼ÔáfâÙìP.¯¿N‡Th¶ãN¨?±£jŒ¯èv=BËR‚QWdtæ5hõÕ@}#<Mî\EÏ¥¨•hù¥å‡s¤\fèÍìSUꩧ ^fU©iwd}!;DˆAD]8ƒMÒ©˜ARÝÁ¬ëV='¸GænÇÌ6£vü³¦Ar"é­Ï£jÓõ])KÈË(c%8áŸF`É›¤w„)½ÂYEßAú’ð+ž9¥ïE¨gºÖKŒ/¤jyS ̳xf×ü¨Ô½Få!¢ASd\‘YDe™·Tñà"˜Î[þñåe¨(åÔ†9l•Ez‹V®Ìlñž;Mܸ>ˆ'gÜè#åãòéË€ZC ÜôJ‰R2 uP†³ uâ(19Ô"q8è#ÐJb”:ÇÓvh omiå4Z¦ ê¡~ﻨ}þ1<Ž3ÏfÜhÖ3ú\™ŠqUŠ4þ"''°k¬$”/¨ƒ62š›èrS»D %YP ‘¦çõô’nàP=ÉËÐU ]ŠS’«9e³F‡ÁLî×"ZÆ‹õˆ** æEd á_Änª¨aê>9éù³SùSó£êMÊ=û4ÿ ï"%#XñÈo¥äG$u·³U´ÞÏm1Üoywî¨k›šn¥*ÈšMG¢ÍHÐ:‚»2ÿ ‡"ye6±ôƒãMtªJn»F±ÆJ·S‹xEìõür·žÇzáaŸ" >IqbÙ—a=oLV*É~ñ—ƒ~‘a3þ%ê*rj´‘j«7)¿æ"ˆ¬`ûÀ|}I>ŸÖ'‡l¸Ê<¸Õ#Ô7iÉnÒô鳤˜¥׬ŒU0‡áí@;|‡¯Žß2Š5¾NÎÔN·gSK¶Ue™I0S¯à*¥ D¿æìÿ PðÒ69«v1ì Í‹&ˆ‘»V&T[¶n‚E*h ‚D”¥ )² £SXê1îÏ»FDJógu€`ÙT}¬‹|F€©›J³Æ«ÒÉt]Ë­ ’NíÚŸÚ¼A¨ ÍØ$é×ë ïWwsú”ã)86v‹IíBÒTÛ,ª\1YÛ8Ê¥yUÓ"F‘”pÙåÒø|J°áÓã2s ‹ÅŒivÙ·›QÚ ¿åO*Ó)˜Ì3x²} d“õJQ€s˜ÿ Í b„LQ ;Î^)ê#ö¤î>A ¦?÷NC‰_p}¤¶wiÍWJëgÎê ¼I-aº;uqΈ‚‡{ öˆû‡ "dŠ¡Ò!z B$¤5îqžÁ92ª‹ËÚáòêõí&áa(áýç?mV¸;pcyßÀ"=Ì|ã® ²IS”„Fò•°Í@/i{XÄnŒYÂÌ`L aóðœ¥7éùHÅUѶÔïY­l¹EÞäìMgQ¦\âš•«çœ­ÓUz¾‘/£.º£4²‰©Ý^/OVAb6`žy!¶s¥ÑGÎD’¶³‘TãäRuû<}"_åuÈÕ7è4Ú‚ˆÖq²Éñ{äû#~@D°m‚-*®xâ¨thÑ%ú@Н÷ z§c`ÞV¿f‡’›t™Ulþ*]šÌ´]3 zí¾»ñi¸?‹Ã¹:j.Ïâõ¹(yÖçH£ê5t‚¡ÓÈÁçâ”l™{ ]K94JÙÒÉÌÙ`­”°Lš°Š‘¨_+ó1—X7í›1@Q'áî½{€[´“¡æ¯g]Úáà°µ¥õÉÍŽZÀóM²ÊÍY ‘ÐÛ5=\é>QDQ(&GzvC–¸i )ÅnÛr»ß4©šeAsBCu Ùl£L®¤EŸ¥*ª*%TQ1‡÷ æy ‹Žl¤f Ñ’"wÖ¬½N¯-P…*Aë8ud¾"Ô¥ê=±CùüDñÉìƒbjÜNy3ZR)ge<”ÖWd°ÊÙéíšUöÿ º*i¤ 8•¦c‘RFb›TÓ3–ò6)U’*AÕÔA ²øÈ`O£æë ù"@L¨g‡5®4é©ß)lœ˜!ÚÓ¶jQkglmÖJ“¼¸Šˆ9Ñ w"šF!ztî7Ú'ªì÷gt:Ä’‰£(Û^AW®¬ØTñÇÇÒË¿lPóŒÔàn;|Cì­‰§!6ø…S{™âLÃ/£É&²ÊBD\HXæ’(§é¾ôÊ‘Š"›b{¿¹kµtŠN9EFî¬BªŠè,C&ª*¦p(’©˜JbˆAñKåÖñn=ëäO[n²á\2”vUô\v`äI"‚ö Ç) $õ2 ] =ˆI²leŠéw¦%8þÁýë\Ñh™m"(:Ê\tkt&«SŸ«û –B2!˜v&aê¢Åò(ÝâN%µÛ9‘¢´"¨£ …Æ|ñ»ò€™æ5ëqbk.#V(ñUäl‚`O¯wl¾môìãôÖ@‘x0î¥pÃÛ-¦»ÏÂV7ŽQhm£iTwEõˆbHG7¨¹'oPP ©Ã¹—‚è Æ a¨¬rZÌã2¦It“‘>ãDDYX+ï™Ì@M3m+1ºo#¤£_"W,ß2vÜÇAÃg((Såzø˜:~¹N™Ì¯PɹQ“Öõ*ªbº°$“Y…²™$å2¦yª=Ê-VVJ”¨‚eÍÊDr™}'Y2fK‘?HžN[ËBÓ¸:£Í,k5Öꘪ #CŒs[Ï´(—¤G±Òr WHºbTNÕÑDæ˜ïÔÓŠFÙé¶NRýY‘ã^Ìõš*ý¥ª§%˜Þ¢’j2[WJwÃøÏ"§©ê`ØWÝ8¿< Î{v¶¨ª.2YC»CK𙄽\ „T7p˜;@¢oõËpûÊÆÇËîÊ@ê?îðÑÄž§Ì{AM0vÆCJÈXE=\½‚©(\":Y²*¢!_ ŠStï 2˜Ð왌‚fŒ÷)¥ÉeJ÷OŽ‚%ó¢7GÙWëR8oÒzvIƾyMB,(ëC¹‘4\¥ E nÀ=/S/³]ûúú+^À&(Añt¸HñÚôýTZ+ £³×ÎùÀR#Lx.Èé* ô(ªTºz˜‡RMæ 2ùº`ª/*¶(©”Œ™Ã¸¢>ÉÒ§'áû@ÀOÕ²¯Ÿhùÿ §S7½!ýê{”€ P zõ( --- NEW FILE --- GIF89aÈ ’¹ä„ÌÂLç”ð{ôMÈ ’F­À§âÚƒP ©\ɲ%š *:¹aƒŠ Tdè bC ÿ+TŒX1bèN`ðhl®x:Áf­)VàÌ¢é„!R‡Œ žÊzÜ0¶*ÔnÆ$ò`ƒÒ2ÈÝ FŇZRŸ~q+Ѭ)ŒÂ-š±hС%† ]aóÛ…¦‚fî)˜°[— C‹í„  ¥:ÑfKt©Â"Jôåç6–T2Q}Ês‹5T\*Å«X´qˆAKcgE¬@±èšNñ¬JLº+µ*Ä´XPÄD—(d”Ä Z»„­îQÿŠ·E¬rk§’›Å™+x"jKlfa»P@ÀI½ˆ ¸¢YÀ­ D{.òª ÊiýõØ BÀîBP¤÷H ` ÚZ` @,ÌI‚B Ÿ†Ð¸ ¨j VÆc@#…Y€˜ˆG#<ÿàY& ÅÁˆWù¢ ^4Åú´ Ipq[c¸×¬Õ 'pÄ‚ ©Hd$ @c²ˆÆ&02 æRÂÄDxbYl\dPd4¨M„ rä°r52[új‚¬&I„šÉcèäpÉ ^6aZpå>YH k ÄtÈé¦(0Sox•˜Ô(G'³•Q £YC51AœXÐ!ˆ)L6k‰d¦J‰‚W"Ôé¨0A!)aB™ú…kÖs™‰ÈÔ6¯Jžò!ô\:yËk’Gp¨7j„¾ô[9/P 2 Ü*”(-ª„J¶ ÿ×´*º9OZ$áŽXÐ@$Ûå•2OÐb˜\‰4‰ ‰lÓ€¼P at S$rˆ¨:¨V5†LÒÅ—nRæ ·ÊÕ®z5(4£LØl‚•ÌP&yL R°1!¨ SãËYó©ÀÄ-‰©K J`† œàg+HV–œà+Xщ_…R—·ž 1ÓKFÞW1|à,fê€a7ƒ…©œ`E+Ëc3°V^:æ­†•€MzbÈÎì­fð‹a9áWÐÂd2RøÉ63Ùd·:i Ì.;—­@ p S‚{›LÀ3a±IJÀÖ˜t`Úp.Õ›‚Å–ì¸1‰Ëœ+ÂdÅP”Uÿî ~b–év@/n™@\6pÝ• Å1Æ=Âi3㘔 -’$,g.æ‰\Hü ?o׳B‰¥Øûíöž¬êJÈE‰ ©¤¡Ðu@½š)Ñ" dˆCcN´òB¸f͉Prsàóž Í»«xý>,=òCBÉÓ_„kú~ yÿ &ªÉ’‹ýô©vŠé£¡ä¤·%¼À~Êx±ÂQæG27~…0-ìçå ÿQ A"EKK0JÕÄÔôyP0xoÐ}rT~Á ˆ-ÕLàK@×.‰°v —JùT%§]TƒGpMz2M*Qdàx‡~`B)‘„MU AÛ7ƒ?XÄ„ƒpsG#×0/%3AèÄ¢zMP à…@CMpyö*QPI&xç§…d@RQP•¼D,„‡ rX†æäÔ…UÐ%å‚oÈR*SA÷·¨2 È,cPˆ#~nÐBë´OI Ôu‹øŽˆž×ƒJÐ'¤=ôP Ò#Ð)°v{efA"üÅ2UðVTÉWÙ2Zù^ð•?é3ÁZÿ*ðY–$‰1[å…€µzQ­dWÍ•–À„1{õÙ•xDA²•cZ{å6qÐDQ•#ƒ%Zfá_–E]+Ó™cÑ~¡™IpZoù0qX6Q)À›Vš)Ôc!6O€\B`à\«ÀBqZ÷¥iñfc&Îj# 6WIXCá\.ómA^«ðgœtyÈõ¤µÆùVŒ_¿y37!’!¾)X+ЄA`šqšŒA–z8iY46Ñ['P5½õšå9ž©1J! >ƒ½õÇU ê)™D°ZX0ÿ„•Y)Š–£1Cº¡:& ðÀ³ РЩ a¡~:á!«òf©§c8çÁ:©S;ÿD  --- NEW FILE --- GIF89aÊ ›Íƒ¥Ò©Ô”%n HðJ‰"F²jÝʵ«×¯`Ãn-RĆÌL2`P+ñŽB…pÿãÊ…kAžÜ ò6ÈË ¼zÿYxëÀB^  {öyŸ|þ)h „jè ƒhb\Ñ^|F*)v“Vj饘BAtîç©§ùé÷騤–j꩞j bè(ä«°Æ*무Öjk &Äà­!àÚ+FÇMQ…I-ÜIUL‘Ez˜à«¯)àŠ+0 Áÿ=u“Æoì±N{¼A\ ­ïK¸7`rC P at T4C¥@R0ÀÉ)“²ËáЃXYùЕÑb!Ý™wo¾*³ÃÖ%:ø@õÖZwý×`wöØb—MvØŽfƒ».¸ëöÛpÇ-÷ÜtÏÃnßMQÒXlÁ·ß}ÿ-xà„nøà‡ŽøâŠÞ·H1]’ÁtPùå–gŽùæšwÎù瞇Îy¤wÐ ´îúë°Ç.ûì´×; 4@•<áÃïÀ/üðÄoüñÆã°Q™Q ÒÖD/ýôÔS¿@Ò/`ƒýe8}ÿ÷Ú¿€ Tý~ôï[ ^@N@HE,PL è€M,g X΃ñ€8 h@Œ Ð »(À @HÕÝŒ¸s¤ €DÞ̸³$^Zg ‚†:´¥ÓØÄ Ô„’šô¤(M©JWÊÒ”"!¬„i+ƒ§•ˆaì°#L€‚4:`LúCèM3zôPL £ °ê#È×7”µÓž¾Â ÿÔA•0ˆÔ .çW»ŠÁÏè€K`Â@6Up¤Â-»*y…'<¡ ]à‚¼ ÓÒ€9h 1qÚÿ áÞ‰] TªÊ°†7Ìá{øÃ.Ù7oÊÞ ð%·ÊNÒ$ÍÊ>‘ã…/(_è‚8O+(áÈùBÒ}n¥‹‰ÿÊÑø뼓êLÐ9Ô»`õ/PLtíùÎoÚ€ÖEà^$h´ óÆ ´eo€ÛCÀ €±!ÐâÞ>ÊÕY¡ È„Àà¾ÿX´ HWÚ!PPš2õ¨)õõaNhëñ^Õh2€CÍÖ ú‘ b © ©*i%C#ëx àâ4 HØf#6‚ º Cq ¦ LÀ÷Ã?üsDrz§ùãxº§ûƒá®ùN ÔZàO†j¨3äON´)DD‡ú¨4Dj™¡ðG]”©ðEÔ©žÊG¤ó©¢Š‡Å =ô`qÓºÿ5Óô sïJšî ¯ñú®)÷®5ðÊÃO`OÈañÔuO³™WXï±Õs³)uï„W\`€„WïEt\аð4XY vôô‘º9P 0w!FåFsW:~7P2ëe9 p@—! Y`YuY¢:§tJŠaQÝuyÀ:£Ä´§„'« à:¥`Q py 0µ|V ”Á¯§iNXùeòJN¯mNDuhéy•°³ùt_€Ûö±óÜ Ktö„Û¯©OM>›PPmv”³Ü9»² ´cݼYFÂçZ¥ €ßõƒa > ~n.Œ"Ñ$A0žá"¡áä«á$±0¾á"λ.â~â'λ)>ÃÁâ2¡²Af`ã4^ã=ÀB\3<Þã>^Â@.$T‘DSäF~ä\_²1pÙJüäPN^«ÆT^åøe†ì£Z¾å\®åˆ¤æbþa@QNzæhNnð/ÈÜændÈq --- NEW FILE --- GIF89aà  ÏÑÐÓÒÕÔ×ÖÙØÛÚÝÜÐÞâßãåäçæéèÜ \´…¬® áùúûüýþÿ H° Áƒ(èÓê=x#JœQ‘EEŒ2i誣ÇW€4Ò£w‘¢É“&ÿ¨\ɲ¥Ë—0cÊœI³¦Í›8sêÜÉs¦¥‚ J´¨Ñ£H“*Uê@K€=£JJµªÕ«;ø òeÑe–ŠK¶¬Ù³¢ø4z(QÞW°÷ÈK·®Ý»xóêÍ‹`¯ß¿€ ŒWáVaÞ¡¤èv^½I•ÐŽ: ¹²QTVqt¨x±çφ,füè1£ÅH¨¨V½ uë°Ô%€¶ÜØ\·^­õ*ŒŒH—N ´q/–“ý¤¼¹ó¢M·<ŸŠ2õëØ7EGȽ»÷ïàË~€ÂèÓ«×Ûw½û÷ðãïý©§¾ýûr àßÏ¿¿ÿ4l@\’Ý&XV¹¾òÅZ `‹:®Sa:ÏX¨á…vÈá…ôñÕ!^}U ô¹€ ýö¤p!EI磒(ÚhŒVj饘:‹E‘Ò --- NEW FILE --- GIF89aë ÏqrÉÅÆ:63ÁïNT¤Xä÷øùúûüýþÿ H° Á‚æø°á"JœH±¢Å‹3jÜȱ£GŒä>ŠI²¤„<ÿ4QǼ—0cÊœI³&K6e†C±É’9Ȳl„£$(• @‚Ä"H*U¢‚K•"…PTÎР=}Za—dIγ2yþ¼2´€pãÊK·®Ý»xóêÝË·o]¾¦³Ò­”=ƒuÔS@µ±ãÇ#KžL¹²å˘3kv,œyìðÈ4r,A¿¨S«^ͺµëת Ð9æ’Å€:$lÞÍ»·ïßÀƒ ‡,ÁA¢Iðp ê³ÐF+-\ø2B --- NEW FILE --- GIF89aÊ J´¨Ð.9 æ8R¤©Ó§P£JJµjT'3Ù A-Å» èA€alY²fÍR`–¬x˜ÿ8 at x{©ÁX1r\Àä`î¥ ìâõ6Ã^1lÑ*>ËØÁ1ÄðèqB‡Ž„8X\òáBÌŽK;N\ÂCŒh1/\ÀȼYµg1?²zV¨:am·k«æñù (R¢Lù J'P®D‘ù“áÄŸ\Žüwà‰C‘.Eû”ãÄ›(2~üòŠ @¨ñÁÃúÔƒø@ßÁ|ô?ÈÏßþ>ûä!ÈWàz&¨5` ÐÅÀáƒ8àa† ¡‡ ¸ØáxX#6zØÅÍ ¨Ÿ†þYh¢‹.(/ˆ\àQj饘fªé¦œvª)Oð9 |¤– _©¨¦ªêª¬¢ê¢ à᬴Öjë­¸æªë®ÐDt)ì°Äkì±Èv9DDÊU8)8r&¨$O?÷``¶øp[ÿà¤&/¨Pƒ˜‡Dkô—¼ ƒ“·%„B0Ì[o½1Ì›ï½÷Ò»P“éé%,˜‹®!ê›]81EGTŒ¤QÄQÜÑÿJ@á d  ø@ â€4ÄAGHÂ&p8ø ¨ %T¡ GèB– Ã*´p†2̪)¸° K°¡ « 4L §8E*TáqGàDÀ ˆ€‹ð3 ~`0pÁ ¨¥–€…$dÁ [Øç¬…$`a -ì|À…°¾â¯ëŠ`Ïz‰4õ©j$ 0à¹4ô¢#À€j·êU°úÕ\€­R û Ã:µ P @ ²‡Lä"ùÈF>ZÒx쥘Cˆ²”§Lå*[ùÊX¶2|â €áx :0ͦV@ ?_>>èóaÜÌå Ã^õªu^äƒÃÞ $èò Õæ3PëPÛŒ™÷h„ek æüN "A ûlá>i¨…%8 éHgz€{„$ìˆZÈ ЍŠ3Š¡6¦¨“в(Šë¥‰¨À‰I5‹º(«X‹ìõб¸‹¨Ø‹¤hTÀ(Œ²HŒ­h‹à .+ð À¨õ|ó…&wR×x'i0ó\ #+@ ˈÿÎøYkå$v€f2zŒá6¹àÁèlÕlf)Lð)Q°˜²þøÕáIC`âØŽðŒ˜pÐmî¡î‘‰ƒù ‘øñðñ8ŽC¯pçÖƒb î f—° k¸†ÿÀ o|òX(†DZ¤þ¶…„ÅÊw ) f`À´=p PI*Å\†I ²u)Ñk»† $€ù€a€–qÆ— €Àæ‹'Š`'¡ÎmHѶl~¬l¿ql(HÈÇ6ÛaÈ"hІl„m.ø*YƒÛ”ܘü*á¶ÉáÆ‚+ˆ£3 --- NEW FILE --- GIF89aÊ ›Íƒ¥Ò¦Ò‘©Ô”%n sÞ\ŽKn]zï.ÖÁ‡ïÞ³ƒè?œÙ=ˆð]~Ð p?aÄŽ<¡ÃT;þhD—ùàFøP¤ÿFú cMÙã”TVÉc;ŒvÃ4'Ô Æj½%æ˜d–i¦[wa Úrkˆ·¦‰ÄS0a\HW RÁ$!U8ñC ZhmüñÈ'Æ«)AÌÓõZC?ANh-Ø(¡u<ÁÿÖŒ¿ý?žó€ƒ ì·ïþûï[æÃ%8hÆ> >°¿¾e2ÌÏ>ÿ8b~ üéï:`ßvœ~|_ ú–%«] ÈB˜à„+hÁ „²ðÁ,x &t²à-dA„láT¨A,8Á ! µp…( îƒ(Ô 5x…,N 0ú@  µcÂFn EY€ÈL¦2—ÉÌf:ó™ÐŒ&2¯…XóšØÌ¦6·ÉÍnzó›àä&üê¶1à èL§:×ÉÎvºóí̆(DÄ b ÁöÉÏ~úóŸ ‰)0íÔ+žÀƒ% .ÑñIóÊXÎ241°‚È œ`³˜½9\b L€§š×Ìæ6«ó…C•Jç:ÛùÎþä2P Rx°jœïÚÖÀf°:Å „¸>þ™‰—ÿbó˜X= d €!Ýö å†ÿ!á& ™_?"_†b(àHÿ_s‚‡2'òu?£¨ØhXŽà_— =?0RXDà“ºò“? ”C”@¹+D°L–òøcù‹§àSv Ŧ\x•É$…ÑT‰oì ˜ÐVä2†aˆN°£±‘ö•€£{ º  Ê þ^AÑ’´2¡Z¡Ù6D8,º¡º¡ã^5Y â™OÌÇ{&z¢(J74Ö.ú¢0¡óÇ€6zÿ£8š`Ø)$ÐaÌFb ðaAÊlCúÌö# ðb& „Nú¤O: <°bæ/b@åt/gMñ…ä²:á®0§ ó~ä~à'~.€ÆñƯö¡ª;Æò%9Àk¹Fû·ô§5êµ6€8€èÇÏqȵ6a lóChl‰8Ζlþ`˜ÉÉÖ=Q p‚)øƒ2¶ƒ=˜ÊÓæ æô <èƒÂÊܵ¬ --- NEW FILE --- GIF89aÊ )`wJ0=!Rk3 DQ.yŠ]£¾nžÍ@¡ÐB£ÑG²CªÕU²Ød¹Üs¿ß~¿ÝÂà…µÑ} ””k~w7þÝW AůQÿãsãÍrÿﯽ²…ÿóÁǾšÜÓ¯ÿé“é߸óéÃÿõΤ˜†  ñ ôõö÷øùúûüñ \…ÁqŠLÈp¡C…F|(±âÂ7pܱDJ– CŠI²¤É“"¥,Ù!0Œ 4ÈœI³¦Í›8s꬙B at LJ´¨Ñ£H“*U:àè€ q¢1Ó j"ÚE` OÛ·pÿãR€÷vƒ‚ ò2È»`Â]¾t)øu@!/…P˜« ï_Ä *„IRРå˘  Ã#‡ ò¨qiŠ06.ÙÐqéÄi—tˆ&ÆôéÔ6XªÎÌ›÷Ôœ8é(E¸(N²DI.JÇåS¦w2¥8”å³—2¹ðêPx¯Žýx)ÑŸG%µ„ ð5\À D¬­#Š#4`ÒÄK~ñ£ì²õ80OM`RÃ2PY ±Òâ+”Bß~»¸â–ë-¸1” . á`&%Pkm!"8¢äd;8QÅ(™DEIÿŠ4ENìí%ñV{ ¶—X Áî¤Á5Q,“ÿÅ_|Hð.Âò’Rï ÷" ÁB-¥òÊE1 €•‚¬p"#ß[ƒ¶<\Yñ<„ÏX ´VB´+dÂó ›Ö%LPÏ @-uÔT»5õÕTc­uÖ\oucTñîØd—möÙh§­vÚ0|ËCY7`AÅÜt×m÷Ýxç­÷Þ{W¡Ûp°à„nxሮxâŒ/îxâD®Á? ÀP`€[™o®Àæ .úæX|®¹¥wn:é«s~º,6´×nûí¸ç®ûî¼÷ÎûÛ—LIŠZ<`üñÈ'Ÿ| Ÿ P €ñÒ†}ñ L`nó à+NqŒkœ¬ ÀÂ6)p.Xœ $çJÎ,@ 'O9xÐ…+¤uÉK)Ü9@ñèÀ—‚tw2`ç è€;5@)NàMt€Ñ8,×ÓLaðyn€<¯ë ï³;(á·¼©q¼ƒö GÓë]{½£ü'8aÒØYΤ—oœé_úúOÎó=Í^< À¤U€JíŸV·ªVú×ÏjTÏ ¸€ ؀Ȁ<¢€Äæe‘ Hlº·lèøµ?ð€ è€&Æl?KaP 6FmÕ¶‚,˜c!oƒ28ƒÏÄì£{ðÿd:¸ƒ:ÈAsów`uB8„W&X‘C.fJHP/¸xNø„PQFÀQ¯Dºçf4FRŽT-Ñ…^Ø:ð Þ…„€  W_˜†-/³ÐX4f†#p/j8‡ Ó†¼EZŒp†t¸‡aÀ†cH†Æ°…rȇ_è‡n8Rpˆ†„è…†x‡€ˆ #C®€ $pŠè¦•×1O ÇxŒ‹’ŒÈØ(í5Ø1s ½83x¥Š®`*uôAòÞØàÿ£r ÝHC¾ˆ #cZ^±æ!"&R÷hö˜¸a¼ØŽ·‰º¥ZA€$¸Â€·b+Ëæ+ Ù™‹8 ‡ÕˆŠH]6v •è-¸‘¸Ô pòópóÆTfÅM[àC[ rÓºMZ \ÀVi­>´M?s€ÙÿrØÊÜzs×­iV6'N] #\ O  tF‡ïÄEòÊOUçNöÊî48às€åNÕƒ”° §™“ à³Õ“,pñ, pgϲgEk=wæŽqgCg=>÷ðÐÓs5P½Ñ<Â#º˜Z¬§{W'ÀÛR§Áz—(@^¹Ç§¡7ðw¦‘|²µ¾A×CÚáR at 0¡iÊ!¸sKÿÚS°~[Œ7À/NÀ*AÒQÅÁ¹Uà¸ëºéÑò ²‹ñ1Ž€ öñ0]¤º…ñº€ŽÞx­  ² ½û» ¼½Kï" º‡{º—hØÕh'PÂ'Œ -\h5ÿ{ù©]a™viÒ'}Ë}ÕW“~šæ|C¼}ÚWÄÖ·}Ìçi,a£ï‡ ³ÜXjBÿ¥jWêWÅ :`Ñ`0Ò!û—a0â"eœÆ¸l|ÆøW)˜lÉFl$ˆ¿N€apǾ&ÆFÇÁæ,Aß ‰à5]Ó5A{sñ ëÐbG ;]P PËØŸCP¨£YWyÕ#‹f= --- NEW FILE --- GIF89aÊ ›Íƒ¥Ò¦Ò‘¨Ô“©Ô”žÆŠ%n J´¨Ñ£H‰˜à—CˆHJµªÕ«X³j­êc‡m#ÚÆ‹„hÓª]‹vB¼´ÿ$P@—] 4¸ûvÂÙèNÈ;WÁ· œÝÛ@®—07 œLyòÀ0 ­1=F;VS& ¦«m€v·ËÝîz÷»àov›Ç„i¥ ,ƒ˜.µl€¸÷½ð¯|çKßúÎ:pL‹ÕŽX `À£7½] ð$íµ/|©å^µ‰z¾;:µªW áEÁ Ž<(l‡Àµ†µ® Œ„µZÀ‹žO€èóábk8ÆN6†/ÿ b Ø »°Xñ†pø†,à Þ †kÈm‡z¸‡$C‡Ð]lX)Ç„¸0Äð‡€ˆ‡NUˆŒ/‡Z·¥ˆƒÈˆ{èˆuh‡8‰”‡–ˆˆvÈTŽ`¿€^ Sy¡]kбŠzÑi±Š -L"v 9@ ˜-¡ø ›c<ð^oâ^Á8ŒÂXŒó•:`ƒh¸8Žà.ÿÅ^ÓÑ6”×H)ÙˆÖhP ÔQd—ÀÿŒPs ô"Š—€@l ð*©n–’Á©t„EøUL°™hé52Y p?÷„HéNKp19Ž4Y“—°’`…TùOk¤ ðK@†n RKP–>Ì”&Ù—ñà’|)MÿÐ9a0Q™z:Y˜Ü”w˜‚—¡—ÿ”ŽYfT°€‰hxÉd °U™™m†v€Ù y©ibšyF º Vk…:¡ÈlŒV‚&˜¡º¡p3=‚8¢"Zn80,'{µ@K¦Óƒ<.:oÆÇ E™³¦kêFX¨ À÷ØïáDàB É»¼Ò¼É;"Æ!m_  9]Ñ}ÑYÈ€ --- NEW FILE --- GIF89aÊ (‰±_r¸l}¾;DexˆÄ&+=ZeMVwˆ–Ê‘žÏmw›—£Ñ’žÊ ÀÀÀ-†  òóôõö÷øùúõ ­b\ôxÑ¢ Áƒ*\Ȱ!Â=\  ´çÎ] p'Ï¡C¡òdx”-b$l at y²üóèÏ«cA½ '3D¸ô BøK*Tð°úÒøû˜´g&¤g zém l €z¡)†9° çœtÖiçxæ©çž|öY'lËQÁœ„:!h¡ˆ&j¨¢…Jèb@~”Vj饘fŠ){švêé§f°„-–jꩨ¦ªª©#.!†RÆ*무Öjë­R„žuõ Žà€É¤Ï>È"Ë€]< EÔË0×^`B²É„¸‹ ¼=0ñäUCPôUOñЃ5Œ°:Ô´#Æ ÈÓÀSWMõÕ À€Õ\cíu×`-¶Õlp‰ 9À öÚl·íöÛpÇ-÷Ürç ‘X‘ïÞ|÷í÷߀.xVp PÌÁâŒ7îøãG.ùä”?~A5‰A€˜U@ „?Aâóeø +Ä ÿüô×_?î?\²‚fòëðƒü<ˆîb?ù 0Fò‚ bà? Fóƒ,0a Z¨ºP…&P„L(! ³ 7+L!…>H «p…V¡ 2$\D( x @ ¢‡HD!Šaà Þt…nzS W a8»)Îr’óœãL§7¯P³ |àðŒ§<çIÏzÚóžøÌ§<;ð"6ÎbÐ’$JЂô ÝOð&"8ô¡¨D'JÑŠJ DÀdF3Ù»§È@]LË#$páHKÀ ΄ìB¹ÝýÁ À¨úÚ÷¾øUÔ~ÐÞƒiw»Öb˜(@àøÀN°‚œ`šˆl]¾‚¯ÿ–P¢YøÂΰ†7Ìá  O¨ï|ÐB:¿P‰Ìà‡Ç cO«gM`-n€Ö¸¶À|¶ ](kºÙ…&Œœ ,w9ÐM%tÁƒdÅê¼LO1h 1ð 6(†(š8æwqJ}S‡¾Q /uŽÓiï„Ú =Ì v¨‡‚¨‡œ ˜Uc€Xé2ˆŒx …è‡X‡@Õˆøˆ‡R‰¸ˆ”(ˆ–x\yåЏ‰•؇—8‡>åw(_À RÒ¥53‹°&´ø\¤eZ4ÐR2Æ@-©¨þ&$+ '*ð*@ŒÇxŒ,ŒËø{Ä(')pUµˆ&°4´@-ýÕ].ðP žæiP@BÿbP¼Ø‹¨Ø  ` ØØ ^Àk2"+Â!é‚É! ) n_š¦jª=ù#‘‰A÷ $§pŠAT§xš§ò3–i ?Й«é™èdN&dNãÔr4dà„¨ƒÚ¨VЦÐDhtF … z=FZ/å Úgi(`7¤!ÆæµºA_¥6(íGj¡öÇÔêÇÇ÷GȄ̠ö8¤&k5ñ£Âjp€ýg6GGš\k h¾Ž\`5ñ p=ë?0?@7qƒ; +0 j#"p–;0?jƒÏ—`ÏBFÏþ ø 7G#ÚÂÎq“?^`(—V$”QÐ[QB­CÝPpCzóAzSÑU@Ñf•r7Ô^P9*ÍG´8fƒ‹ó Þà®åQ5A --- NEW FILE --- GIF89a< tt y²lNNƒ… iu­.§-Å“ÉÊËÌÍÎÏÐÑ-  xÒ)q3 š›²Ë®4 床 --- NEW FILE --- GIF89a6 Ke4  ^G"Jxo–K1f^]yyvC¥M † ˆ$›—™‰¸¹º»¼½¾¿À(SÁ#  ÎÊ%]%v`d  ^ --- NEW FILE --- GIF89ao @ z‚ñI¢"E¥$u@ OxP£JJµªÕ«X³jÝÊ5J <à««Trq0tY.½‚ÓIÝ&Ö(Øà1 †¶®ò*s¡Â¥?]†`q…L…³ù6 ‹cp©Â¾É“;Où ¡¯üX[½ Ff)ƒ­bóõ#0+üá\‡vë›ã¤ì5ý×O˜˜PéÁˆtµsÿXmºùi%¢KŸN½MôÖÑ[xˆn½@wé‚xÇ!}ÅŠïÝMGTàxêðá/@¿¾ýûãꇸè¡~þ&¨r} @_:!ÐGÂYø×à vèÿᇠ†(∀‰! Њ$.¡Â‹0Æ(ãŒ4Öhã‹(pãŽ<Ò¸„1ô(ä2æHä‘0Æ --- NEW FILE --- GIF89a»  £Ç\Yl4µÚl*˜d–ifM!`@™|š!€ ƒÄc‚К!$盄 BYˆ0ÀNuæÉ˜™cþIf2Œ9Àœx@¨¢:ð™M6Úé˜añ9)p!XJɘÉ0€ sŽ9è"€êª"´Êè­¸6ª¼öêë¯xðŠ¼®°¯Á"l¯( l½¦Â²É‚Â,%èáì¯ÈBÛ«Äö …³Ëòú‹¸Þšûÿ Ê>±í ¯¼Ü櫯¸Jàï¿ U ûÓ¦ú¶**¡,ŸBD°”I --- NEW FILE --- GIF89a,0 -,‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š™- +‚''}|~av‚+†,E=B?B=C 1´B:2102²»D½¿1µCò¯?==3ÈË22ÓÏÑÔÖ²ËÍB¯ÓáÌÚDÝ䨵ÅÀå±BÕëÁæ?Öæßä³µËü×ÐÒY69ÔâS QcJ9é¦N¨@ƒXµH±¢Å‹3j$‚¨ ¨PužPؤOÈ“Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜÉs$‰ÿ@ƒ J´¨Ñ#})Mq`…S§ (˜JµªÕ«X³jÝʵ+×N^ÊK¶¬Ù³h·.xʶ-I&I—2uZ‘j0bÈ€µDÀ"~“2x™ÃMþQœ±xîœ8Ž|´²Žžœt éÛ% ǤŠxÈòE :¨°7µjÖ¦cË&ha˜ÏJú¸TúTjÚßÀƒ N¼¸ñ°k*u‰;É \,˜8I½ºõëØ³kßν»¨îàËO¾¼ùó€XŽÊãâ„ì÷ðãËŸßÄô>øóëßÏ¿¿ÿÿ ‘¨Læ©Ã:j4…2)ç5y9YKœlòˆ„/²$£¡¡Ê¥ ¡¤^À* ÄŠg,ðÀN =äÈ+-Eÿ—Dç®ûî¼÷î{$ÿ÷èqÉÕ!8r­üòaöTÉOãÂüéo5ØóÕ— Ø;LÀþøI¡K” úW„ÿñ¯{8`8È üMã~ÄÐr@^ñ*5°` 3˜š ¯3Ò#©JW›Ejtbmþb©LgZ“­‡*±ÝFÇÓžúô§@uDðæ?ù½ÍuHMªR—ºÔ ýÁCÍô"¤ÏYõªXͪVCBU;HOL «XÇJÖ¦Jï)«Z×ÊÖ¶âÍk£KÓÙæJ׺Úõ®H{M÷ÊW --- NEW FILE --- GIF89a,0 5u¬µ¶-e— W Bž.\>U^` d¦$˯³¯´ÓÒÖ ©ÙåÛìê¨ÚÔïÝËÞ ØD´ !‚ JÃ\Ð-’ýI¦XQ„?W¢ ÂË7" !‡6­»áêÚ–‹g†þ¯7×™GÞ0yÓV1}U"ŠT²Y$ºio±^UÔ Äoou}Ùòë§x¯×]¼TDx)ð  ˆÑ H c]ØÎ…a¹Â¡ˆíˆu†î¤Q£†ºòb‹a䢌0b…bíæ€‘1zán —ÀL¦2—ÉÌf:ó™ÐŒ¦4§IÍjZóšØÌ¦6¡©•I­ŠÔ•8ÇIÎršóœ>¹SͦÈÿý¯Z£Ø¦<çIÏzÚóžøÌg3S©Òù± €„ AˆÊA‰€ ¨€€AÄÿ£Šh(0*Qˆ‚Ô¢(ýOwÖôÊ€þE™b¸¶2f9n½î:Ö“ŸàG½áÅàCžñʾÊlOxÿZžû²Gõ…Ï|#PUñöEø]o|уžO{7=æQc>-*r>¾ùýô¦ÝCLôÎúºáIõ_NÅVšÁdÅ¥KMV79h¨õg²IU'2.iœ#DÜøˆÙDUÁ&–"B3¬9Þp=F6‰-È2+ÛX†¼9l3›Èç°1ƒ,FØ(„#Yj3+ZËT£g/»DþV¼v!ræ1Aê06äh#²´ùMeªÓ@à478UÎq¤A¶ù&nÿE,Žå:›ÀØ($¹¶™nutÛè(º‘ÙVtš»Üä€wcòx¡v#Cà˜÷éè®áœ¸‹^H±W9;(Ϩjš†¹îºò’Ä0»Þ„)Á"SkjôàÊ@ÍÁ@Ú7\7 õƒI¦Ò‚Av6Ë„©¼ãµŽ„¯ó0+xcÉy°?¬a ÿFÆ– e²d?Ž¥2#(ã>‘ÌÁ$Ô.@,&û#$­Í`ŒN^rT¸£&+â5':ca¤Ìå.GòÇÍú‚Pð SyË®£Î Ä« 㩠ΙˆJ€„LÄO8 N܃‚3!¿ùÖQŠçÁßûBx;œqñ„\€_Û×n6 ¶CåW£Ñº\^ðÆü¤) zXðäVúv31¨>q™éÀmrtu¸æÓ£T,}›¸ºÖíÉOýAîèHg :g¥%¥”&Ä»Q --- NEW FILE --- GIF89a,0 g 59á2âåæäæé.Ì ÑBX\ÖEZdh"èÐA tð@Â@/: ¢àÓG1p(ˆ9 ¨‚Š%˜h_ˆ=Y•;…„*ð`el6Û?’dkn ¹ÚF&©$i:£ Ñ‱3±7 ò,DË‚³•ÿ´~„ŽCÖ-± TW-?Û’eì@AÍí¹èiÕ­¸Æ²›Þ,¼Wí±â~nuX1‹^¾¤{¸ÄúD¯½þ>+‚¼OÝë¢ f¡×ZlíÚÂ¥¹  ~ý/߀Ÿzþ0‰¶ïYïyÃö?°A~õ³ OHÀpÑï ”HB¨ ÊA9lè`uR²µúñxäÛàIÈBòˆL¤"IÈ;ò‘Œ¤$'II@  L0( 0&%q̤4P#A2àx¨À„k­ ”Ï:€7l%i?o·ÈÂ2h†KÀ UÑ --- NEW FILE --- GIF89a,0 XB^]_AV 9óó4X0úôýþÿ24X€à †;ð0 |áµÙD×[#§ÀHðà)nH ꨨÆj©¶ŠÛ»•zª§0 Ž`€ 6) yñàC_À+ì°Äkì±È&«ì²Ì6ëì³ÐF«Ù_XhAÀÿ ¨ì*qµp«a»žP£(xA”£Qæ’Ò`ž-Åh<J˜5Òd$hŠi¡Ëc$WM½„” àZ †«ˆãÙ/]°ª'Å Õºn¸]d'AšM¨´£¸ÅB(ïÐè¦_A½9mjƒÊS”F7 =©ÞÔð=T]*üâ3øÆO~ñŸ*SæKµ›U³pÿP‘ZÿúÕ(ö·Ïýî{?¤}¹*;\+ ˜J¬fiø€¸-! --- NEW FILE --- GIF89aq ‹wñNPÖDkFzG‚ suw(ƒ€™(Ik_cf¢bjœ©ª ›ª®¯­kK¯¬©²€( =¿ÀÁÂÃÄÅÆÇÈ ŠÂ@ÓÓdeÓ´= Ú;ÜÉÁ ââàÞÝå<\¿¡cab¦¥cÀ‚;y;‹ÜÜ{ ‚þùêQÏ‚ ò(àÌ›ü(0 U',+Zƒn¹\Ê” ›àb˜¸©9€…†2Ò¨)Vby@ ²Öjë­¸æªë®»&Ú&¯À"Jk°Äkì±È&Kì xªì³ÐF+í´ ´5Âÿbìd«í¶Üv›B 2¾±<òÒŒ‘»æ13J/á$ ò%ß Ë+eýa^€x¤ßúíAh±†ù×'Á€ ²6P!Œ SˆÁ fÐj܇tö Ó#¤¤˜2—ÉÌm¬€<ÍŒ¦4§YŠÜ3¾9¦6·Ù/š`\"€·ÆIÎrš“=A --- NEW FILE --- GIF89a- --- NEW FILE --- GIF89a- 8Q«," ŸÙntˆ´hbP¶©#Ò90h  eЇA¢—ʳn …þ ZWã— c4F™;@¯Y!$ôÂDãÕìÅ”Þ Ü©y Ê.aˆº¹Y6y>:ròC¥Kÿ@S6d(·2¹XR¥áqÑ ×±YŽ“Üp bìâ"_ OüZÀ5\À --- NEW FILE --- GIF89a-  ‰¾0ÒT ‹Ó§L®;¼x:úS -Ø +:‹™Ðl ~4fm ÑœP’ŽxªÃ§Á™4Fy¦LJƒT¹¬³Ó¨‰ßü ¡gcÜo=v‚tnhEº"dè']—‡# T¸ { --- NEW FILE --- GIF89a- gbóÊ-Z/^+‚ƒ„Vc3Xy[+6g5BPb;]o˜`T~n~’+~mvN+¦¨±E«i´k£ ¢š\—¯œ¤R{UŽw¹¤”‹r…‡‰ÐÑÓˆŠØÙ\ÔP׃ÊUŽL7€ã‹æ̨Î,äI–F¾;›Á/|ùJäúõg´9ñ€U!8Ã%C A帵#‚)I #@Ya r´•©Ž‡‹@>¼òÈfVJ+) q)2 $™7Oîò Ñä¾È$ˆ<å„%®jzVíÅð„à --- NEW FILE --- GIF89a- --- NEW FILE --- GIF89a- šŸoaê÷FÕ‡ð ر~&Ð:+!|Br^‚Y„]‹Œan}eI’`+™(¡$Na¤v ˜›tHiQg‡(+o°Xº¸ ™ S¨Â3$„›-R)>´Øð©À$¤€`%d ‚mù@\¶¥XýüI£²ŽÁ{…ëmpE¤yæ" --- NEW FILE --- GIF89a- œŸ£ )§=­F°R´p¾%|Â)É0™Ì3ÀÀÀöööÛÛÛ×××ÀÀÀ···«««§§§   rrrppp]]]OOOLLLFFF999%%%  i'à‚EÖ=iwÌμz޶MòN9ÿËÒe#ò,Ú´'Õ® Õ .`Ș à &B,UB"ÐÑJ*Hl"bE%  €€ TZ¦™Î.TÊBààœP$ Ìΰ  ùIŠ!%À9iÀq"f”½+‚Åïª O£gÀc',„Èx¢ W‡–!<ðÒ£à‰ “Oôb"C/2áç„~ap --- NEW FILE --- GIF89a-  ƶaðä…O”9˜F¢U‡<©!$¢“‰WôÈTçG'… t"¡ ´ÿŒ‡>yXÄÞ|ÒùÉ\¥tëÚ½kh9"Ú¸y{NÜUN$R¬xcF³3b¼X‘‚ÄW%'m½ÔâÄ[!%\\‚À@PÀ ÆÑ]HØ'@ä'(†èæ¤1 ijÀÕmˆO °;tçÔmv²BHŒ' » --- NEW FILE --- GIF89a@ AT™ÅC# e/]v- ¡ÆXµÚl’¯Z¿ß€³Ñx§ÃpCN.½ÖŒ«Â€™Ì3‚¨4¡ÐC—Ã?¢ÑE*6Xq&¤ÒIv—4 §ÓO£ÎMŠ®A¨ÔQ¬ÕY°×a`u6'PZ9$(792ÿÿÿÃÃ㣣qqq--- H° Áƒ nàP Â;’´XD±¢–KCü8 +^̘ñ#KžL¹²å˘'/)a"³çÏ )›(шªI¨SG2`©Ç,ÊNô€ÆH4ÞÍ»7ï®H~¨N¼¸qâKü*_μùrD³£“™Šv«Þ%(L\ͺUêÕQöLò?2(vL7ëÇçÕ'ˆ½OdÈ ué‡p‰P߀I)a --- NEW FILE --- GIF89a» &,! -9 ®×]wF‡£PµÚl¸Üq¿ß€Âá…½ÖŒ™Ì3¡ÐC¡ÐD¢ÑE—Ã@ˆ¯:¤ÒI£ÑH¤ÑI¥ÒL¦ÓM™ÁG§ÓO£ÎM¨ÔQFX"«ÕVYo-d|3¬ÕY°×a¢ÆZ;H!³Ùf´ÙiªÌe·Ûo¹Üs»Ýv½ÞzÅâ‹ÆâºÔ„ÇãÈã‘LV76='¤¹w”¨l°ÇÅß‘Êä•kxP") ÿÿÿ¸¸¸,,, ìƒÓ:~ä8iujS^#HøP at I Om:= K,8äšlË® ³ÐnË*­Ð†«­ ”kî¹è£ÿÃæŽ@‚Vè²„î ž€n & «c_æžð.æÚTn½æòf®¼ç Œn¹û\®¿ü& 8-õÔTWmõÕXgÍôŒ õ×LC öØd—m¶Õ#´6Ä ª§< ¡v¾Sñ Á»ÆY! !ÐgîÉOz  ?@(…tÔ‡ZÈ1(¢§/à --- NEW FILE --- ÿØÿà  ÿÄ !1"a#$A2Q3BÿÄ Ž?zª-µA2™Eœ8U4’!DÇ9J<ÕýÝÜœC¡ZÛ¶_4¾U:½%’HÅ@GÔ‹„¡Å­b‘ZAcW˜Ÿ¥î˜´TrR²FB&)û”yÊf‹ê½×Ó1=„¬ÃÛÜâbLˆVñ5Ô¬ ÇñärQd{°")]l­ â«Ë599C;‚5¼ YšÅµú³½„~ââ²zçYk\j{Oº¸Ü¶¼Ô¡ìÙS Ùl“ÁÁ$Wu6y*ºYš7AZ¼‰#ÈÒ¼5æªÈe>QÒµzÒÞ½*óެ>8¦ü}Yå ¬oà3¹lä^ `}@}(µáÛøyͤÉhó5+¸B Á•ΪÉ•T h¬G¯@EtÎI彪…8ˆxþÓ‰bòýêþÒ¨u–CëvÉ^18$îÂ8æŒÍ~ߊ6ÛkäÊÈûŒ b°øÂ%.—ko¤RrZ*keóóˆIgIgÕjsaE° c6<Œ‚.2„î$2‰Š}Ä<€¥ïÛ’³½,ý7i¤n{<}úþé (ª¤í¡è7XáÛÈEª'M)‡¿í ›Ï‹õ–3Qr„çO‡,Z‰ÊV+f’•p8˜ÅnóÃ&c€€R‹’€Æ0œ¢@)öOdý3Ðö;êã­’X£ãQA4YCŸÒ&&ÑOÛ (¤­Žõ}‘”’2þáÅäZU¦@’D±@²J;q®²~”¼‰% -G>ÒÐ~ (Ê„ÍØ÷€¹ úâÞv¼üHSXMÇ0xP(‰ #ieÇåp˜M~µáâ[#™Äãµ&?L÷¢Z°Zš.ÑÎÓu\4ž@2 HdÜ<ËU³Ê­=9ä¯3V·Yå­j»Il×’H'Œ¬±;ÆêÇTŽ$DuÜ+ª¸ä ¶Ì”€Tì|‚ÁôãŽ9¥tãŽ8ttãŽ8ttãŽUãÔ³Öc:bÑuÚ‡ªÿ ÆJÄ6]E›¡xª²úÃ?}CØ©øùÊÙ{¨íaî÷7l4¿h¾ »C£ûa”î]>Ô÷‹··µ4XêÛÅ õÆ#SeäÎe²Ò-LN †õ–Ç›0ï’·Rµ~G7u“š»=üUûR›^ÇÛXLÞ€Õi!ŒE¸rxН>'èVfnQFN¥Üsn¼zµ÷sÆ0¯çü;‰¶‘ÀVî,MÕ”Ä×gÅOöœòkÃ5žªçpaN‰D° Qqç¬7X$’D2®¤çz{ƒAa¡Y¨ ²fýÆ'¤1ªçL£ùmæ%î ˜›±F‡S|üQéÉdô{{§¢»˜ršSPà2•mÇî“W«.BžcÓ‘vxÌØ¸X© 'n‡Taf{fû¤ñJŒ§ðX#G¸ûìçýº¸o¬VLgHW•-¥‹XG±š¸ÆTç*Õ$ ݤ[ÇKÁN°"dÓlý·™}ä äâ‡"õœÖÕôQ¾ÐkýÂ¥•ò–G®ýá6sl”·Øó«M…nÇ]nì&`¡)¯yÜ™&ñ&¨Ö*‘Ï\®šßF›Š^í|ŸQ®˜Z|ß'­“lÔ\Ô¯3åK–jʧn ®©¹#h«›X)Älâ¤ã ?³?vih“GO5‡«§´sWÑ>GDv‹%«²p.®œÔyŒðÁ`±yx&¯4펂íÝM~ívŒY¯O ZŸÊǺ /æ,&:ª»ÖÈ=9r ™U}hc‹Õ•ã ̪ŠÛñ-#7/}–0]¶tVÊûoªø!ØÇæÍ’Á8’D S}»#åŠ-2GÄà)Á…‚v=à”À `DJ =þC¾FÆù_f:œ}óä:VL¤Ë$u£-Ô;4=®· ’j%g5ñìs’&ªj$¡’ppMDΙüNC "r” ?ŸLû°Œ&cÁÅyü²&há%ãÙË.íÒH‹ S75~¥Ø.ÿ fl™Ž=„ê~ÑgQvßAé,E\–SXåòjm1¡Ñtiac§4æÕXä†,󽌔É·/Ë”­4ƒÓ†iM…n7a¹jyº †c†i9³lL@-ôŽ[°H Òχ¦Ó¢¢ãåA„%r4èÆCBG‘´|k6è6fȤÜÔý•£àJåh vËö<ëK)åqûìúHT0$•y„»¡žvÄȤu>®j†* H¢àÞ¡{[CGjüm©²ù«yŒT5Ð4ÕÚzyg½š³U‡7hˆ-ù’#’¿?˜u ©XáZ¼ö+8Æ‘ÈGæV˜ªº°cù]øùØ~|×;£ -é©)´0ôš¸b¸“2ŸóøŸûùæóRöd{mªƒs>+¼Þ(¯ÜE]©Õ U²Yê2lܨÍÜuš UäœÖÏU£†²m›.‹¤•n¡ ªg!a_Óÿ pŠBSÖ—b+”{ilzQÇ"¨xÏìÊ‚Ä †#¯ººIX\&Ý“caˆ’ç}9ÚB“ÞÜŸgÀ}HäVnŠ¨Ý˜áüÄÊ6,ñÌAmwФQ¦ciR…( ’®êZ!Fˤ*心•H¨ˆ”`ÑҒχÍä-I%[x·ÇE‘D®É/¥<“+é8xĪ zÎ ¤Ã¥4àI¨ ²{·Øoìß}¼íïä~zë)s½ÑñÄ«NB¹Uh•–!ÝíŠåa‰¬A´>¦ZiÛ&w)L!î¸/p)„> ÈÔ¬×w!؃÷ßaÓ)†ÅFy&: >þ`¶??Û©b×>=5õÉËX<p°1öÌ”åáE¬/=ÄÄþýE‹åä_ŽÝÿ R$Ü„(  ~ 3ÉZÝK10hæ¯<,’E"á•Ûpw‚:$ˆÑȪèà«#€ÊÀû‚à稲éÑé¾×}Èï²|åî/OôbÒdÅ›VÌȹ$ÝÂl’H'ï$‚Ê¢%*+,‚J*CŠIxJ¯Pžø¨Ö»¯¯Yž1vðñòÌlÔ«)œÝ"ÕÑÛ3pkž›Zð$&ºÃÀA Šƒïºí±ßîO’|Ÿ=Uûý›Xà²â`Ú«š~ÿ 3x‹–k®ÝG´»¬u^DÒ7õjáÆÉÔ~c%jQVx ˜g„<¤,ñ•R³le«¤-x—c^`†ÙrÜÇñíúëô×ôØë×OÜĸ2U»$Ü£…t ’#Xð`Åe an¡Ø"‡¸UA4¾¤„*dp)“Þ)ŠR”²ËÔ;§f¾u&ÀrX'=@ –dpYzu¶;Ûoi¢Y›¢¢-'ërbC£²&¢$b¨ÒAŠÎ¿nå¢ê¢w®±šËÛÈ®^ÖJìù4tt¿-™^Ò4ôøLÌ]~ȪB¨ð ,G§¦¨¡‚¡@S¿¾ãmŽÿ ‡éQá@œ`*„]”î£a°?‘ûýýþýiFÕz?uc2e‹NKùjã†Û¦O¾¤Ç ÂJ·)$åG’‹Öë8Œb«µUYÆî ÅOôÌlÕ4POè5sÒ¨ØjçvÊ6ç•^ÀI4•dÁÁd.Ù.G(plìb¨™L)@Å7î)€ß¨ÔQ!)«ÕV¬ÕY°×a³Ùf´Ùi·Ûo¹Üs»Ýv¨Çj½ÞzµÒ{LX4Åâ‹ÆâºÔ„ÇãÈã‘6='”¨lÅß‘Ê䕱ǂ¢¶y%*ž ™Ãà…d;/bxE/d}b://8™‡Ž89•c”/6t³tvo{i:4½45??6?;8ke ?f?ȸ‚Ã4º¼¾À’ya;c:¸º431â3æÈÇa/Ë©´îuJïpßI‰ò÷b9Å5û‘ø Teêþ¸U¥ <7œÅ ëÚÇ#K–¼Ä‚å˘3½3^“ÌTiÀò• vÆ|šƒ’ .h¸¼ù²a  •ŒþQÚBmË ¸NPá7 =0€á‚sáÉgZ༺ºõëØ­/ Q¡»÷ïàËO¾¼ùóèÓ«_Ͼ}ùI|ì(f øóëßÏ¿?ÿø'à€hà&H`!0ß>$C at sÀ0…f¨!1,Qÿ‡ †(âˆ$–hâ‡$pâŠ,¶èâ‹0Æ(c‰KÄ`ã8æˆ <ƒ ó)ãDÞC®ó‚ =ê° 7âQä”TViå•Xf©%ŽK˜àå—`†9T˜&(c€—ðàÀ ¨T@™Œ|éÀ €@˜Œ@æžIŒ°€ *€æj²éæ—)` H'­ôÒL7íôÒ-,BOWmõÕXg­õÖ\s½D t-vÕSmöÙh§=ö¡$€´ Å-÷ÜtÓ}„ Ar™Kš4Æ ØÀCДb3–JxÑPV´L ( oP¤"!` --- NEW FILE --- GIF89a»  ! ˆ¯;—»P­Ö\:H£Ç\Yl4µÚl¸Üq¿ß€Âá…%+o~R½ÖŒ™Ì3¡ÐC¡ÐD˜Ä@¢ÑE,8¤ÒI£ÑH¤ÑI¥ÒL¦ÓM§ÓO£ÎMu”7¨ÔQ«ÕV¬ÕY!)EU%°×a‡¤L³Ùf´ÙiªÌe·Ûo¹Üs»Ýv½Þz4<#Åâ‹ÆâºÔ„ÇãÈ㑱Ǔ¦k7>(Åß‘¥ºyÊä•0: ÿÿÿ¸¸¸,,, AifãY³Â“ ´ªÔšK+ø1‚BÓ¯gÓª]›v‰„·pãÊÝ(·®º|&±PôÞÛ¼J0Â¥0B‰ŽvßÒµëÓƒ†.üãðâ·”ï-ý›ùpÜ:S€K ´ŽÄ¨S«†»„@„×°cËžM»¶íÛ¸sëÞÍ»·ïß· $éaςѓ+_μ¹óæ6<ŸN½ºõëØ³k¯Þ¡¨OzIlœ›ã"ÆøóèÓ³±±$„û÷ðãËŸO¿¾{ ìëßÏ¿¿ÿÿ úƒ>ñh¤w¶Ð'¢›f*  –ÞY¡J<ê韨¦ªjªK(àê«°ÆÚb¬´*0+‘(¼J™«‘ € 'Œå‘ˆ«6P«­9ЊB ˆ­«Ù„9­±×þ ¬c•ðÿêR®‚¹ì»ðÆ+«*Ôkï½øæ«ï¾üÖ«@ ý,ðÀùòIðÁ'¬ð+4ìðÃG,ñÄ7œÂg¬ñÆwìñÇ O¼D„lòÄŸ¬òÊ,·Ü1`þ0Ä iÐ@Õx axB(a38ЈJDÄ -Á%IIc¤ƒ$À€‘H/ --- NEW FILE --- GIF89a» # —¿H-9\t- ®×]:H s@ Ã\µÚl¸Üq‰¢X¿ß€Âá…fuJ½ÖŒ«Â€Îç™Ì3¡ÐC¡ÐD¢ÑE¤ÒI£ÑHCU ¥ÒL¦ÓM§ÓO£ÎM‚¤>¨ÔQ!)«ÕV¬ÕY°×a³Ùf´Ùi·Ûo¹Üs»Ýv¨Çj½ÞzµÒ{LX4Åâ‹ÆâºÔ„ÇãÈã‘6='”¨lÅß‘Ê䕱ǂ¢¶y%*ž ™Ãàd6/5\:c†6xb7a6€„†ƒee{}a5 b…¨¥b§©c‘://a‹5¢tfvo¼¦I9b431È3Ì8:4Ò45?8d¼Ûy|4;c:Ácå9ÃaÆÈÊÌÌ4Ød‰ñc ?‚8Áõbå½ýJþ È&G€;j|A°¡ÃI ÚSÑ? ðLJ´©Ó¥O‚>Jõ)R¥U©.ÁÀµ«×¯O(¸ kÊrÅ©À‚†¼žÅp¶®W»&Õ{À+Î΂¸‹á^¯zˆ%K­Z lÿŒ× Ÿ ‚¨Z韄òyh¢‹þШ \jBpj©( è²öÉ‘,°À¥™ 'è²Ì.»ÄÐF+í´x´ð@ -ì±µJ¨—DÐ* À=€µ5D{ÿ.´ëB»‡æ¦+m»èZ‹­¶óv Þ·ñN«®¼Ñ:ð¸ýþ‹®¿'Œð 4ìðÃ'1,Œ»@Ã÷ìÀ(|@ÈnÌñ I0pO £ð`Kܰ˿ˀÀ§àÀA,OÌ ÷D öÜt×m÷Ýf/±ÂÞ|÷í÷߀.øÞ)40øáˆ'®øâŒ7îxàK°Àã”^xå˜g®ùæ‹/œD ±Ñ褗núéGàÑ5L`ãë°Ç.;ÿ64€÷îd£ÍûïÀ/<ðŽˆ^ßñÈ'¯üòÌ7ïüóÐG_Ã[Woýõ' pýöÜwïý÷à‡ÿr at oØ`þùæ¿.š«$2#úèÏîÆúî;ô¬ÂÔpÈþãŒÿÿØB˜À @v¹K’E WŠÂÉv„à €¥ÿ @ Pº#$¡ZÜ‘avDÓ™€G)Á_ZJ=é§=R©ŽZJTœÆ§9ÜQz°0UGVÝd‘z U™êh§Nz’Ûà ÜC‘ÕÀ7ïèȨ5Æ1ªÁlp#‘²àC[õ׃YÒäYÃÖµnR ~-B YX’é5 å +\ÇXü¢!kÀÁÖÈWØ 4ˆd¤Yä ³pÈliKû†Ða§LÖpZb¨6 ôCh‹Zû)Á&ÀE K‚{F­#èAZBÜæ:÷¹"XB‰¦Û¡ QC"ó’•\÷»à ¯…–0 ù™!FæM:¯zÝpƒ%xr½d@/|ç»^ì¡A€P$$ÞY·¿ ]B --- NEW FILE --- GIF89aq [s,CS$µÚlm|Q05'ŸÏ>¡ÐC•½@¡ÍH¥ÒK ¬ÕY°×a!(³Ùfœ½Z(/¿ßÆâ±È€½Ö‹Êä• ¨Àrx5‰šB›œ^ ÛÜÝÞßàáâãäåæçÛ'Œ'î~ð!ƒò‡õôèßùÝl(‡@[?nK܈÷'м‚!8`ƒÅ 7(tGñ"Æ`ÇŠ(¹Q¤ J´¨Q£&(1IB --- NEW FILE --- GIF89aM [s,CS$µÚlm|Q05'ŸÏ>¡ÐC•½@¡ÍH¥ÒK ¬ÕY°×a!(³Ùfœ½Z(/¿ßÆâ±È€½Ö‹Êä• ¨Àrx5‰šB›œ^ »¼½¾¿ÀÁÂÃľ'†'ËxÍ!}ÏÒÑÅÂÖÄKËÎy{Ð!|'éæÝËçêë'í ïèêîþKúùH° Áƒ"ht¢D# 8$ÐF±¢E 8hT DZ²t9ò É“ &¨\ɲ¥Ë—0cª\Ò &J’nv‘V³§ÏÿŸ@ƒ Ú“N–ow ñIzP9r&@:GIO¤vôŒ[â4P† Â>Øð5l°eÅn8ÁÁÁÚp6.ذxñ.Àë³px<ˆPI --- NEW FILE --- GIF89aÊ  MTp€Š²)?+c+r.F "4v!L4_r¸UeŸIV…l}¾9A_y‰Ä&ŒšÌ\e…nxœ—£Ñ)/C †ÂiÙìФÑÁÛ±˜«‡«ºXnA #ivXOa/·ÛpÕꬨÓQ„¥BÇãäñÉ|ŒW œ˜`0.E@!‰{7ÿÜMÛÀO±›Aÿßaÿãuÿçˆÿê”ß΄îÛŽ»¬pÿëšÐÀÿìþëœùçšóá–@?;" J´¨Ð2†5@`€Ó§P£JJµªÕ¨”ĤÄ‘¯`ÊK¶¬Ù³c)‰Á l ÿLˆipŸÝ»xñ)¨kW `@øA„Ôe`8a V@ٱῑ!( (Æ‘¢d 1Ç¡,¡ðÉ Çƒôˆö ¸ ú褗nú騧®ºê,¼”4A´×nûí¸ç®ûî¼çÞ&;èÄðÄoüñÈ'¯üòÊ瀓% m= @ÀöõØg¯=¡×/ € <à—ÿ_áSà=Û XoÀP ™ﳿvû”ú ´¿ö UxŽPˆÂÈY?+p< º…ÎXA \ºÿ¸ ÞrÁÔ肈áct Ä 0’P€P ¯Œ%,sG Uà´ …-p¡ TÀ‚+›öø5€-ÁYÑJX§Jm@]ðÀ ^ ¬óÌhN3:-ð»ÿT°Ÿp޳œçŒÏ”d IØC÷Ìç>'t žË BJèBúÐu hÓF;úÑ^i›»0L¡ZúÒ˜¾t›Ý ôŠá °o|ÿ¾B…:¾0T}#êV»¾ `—FCšü 7 ^ðŒë^?_`B‡+zÄûÂ$ë°sšÿ° /ûØÐF¶“LÀâËi?ûO·ýbˆ!Üw‹Wã/ u¼ è|üñWš¾ Àp~ø‡€¨fÿS}+ at g†ØOât~¶ˆŒØˆ~QS9ÏÁx˜W‰–Ro´F¢#H] {žø‰6K´ã8]0}¦xŠ˜6<™bafÎ0 9‹²8‹˜0‘ ­H¯˜c´Ø‹³Z¸˜‹‚°‹¾XŒÐåÂ8ÄhŒÌŒ½ÕŠËÈŒÅ茂¥TÑ(½HÉÚ‹ÝÒ €¬ùž™† oáqnˆ‡r:§÷ Ã!€ ºb€ à6?‚š~”a u±ºvP´DF «ºÚªTÀ— }T:9!:³:ÆêGgt¬¨ƒQ°cŽÄIŽÔ;¹­¹ DIÔÚ;™+T|ÖÿMÀ¤Kã*Máz®æš®Ô”®Ãã@c5'*# rhÆ=g¨0O`šqUç^f6r)'?þú¯û¯p>n󯻩N ñ>°säsô]D×@ß%›ô7 WÄù]7pO $W6 W!»8ÑuT7PV BG0ʾÆQQßqD+11Òá‚Ï1Õ£²Ý¿NàQpD6HõËPð›_ðì*¨¿G$?àÆ‘ ŒO+à RV °0£2p*p!Þv'`G dbˆ…é†ñ¶…ðfÎöæ…ë|Îõ  ¨~ÓÐüÐ^ˆQfŠA¨å0Ñ”á6zÛ–©§e¦º„ò†º az ºù%~m7âR}3 PýR›p.‡9ðýBAä5>MÓ7`Ó‘ÓòIA É›óU 9Í!_0´)QÔB˜ P‡ÕK Õb`ÕG”^ðR°vRÐXdÖÏÁbÝÕÛ9f­GÆRt9£1Ïq{DF, H :ÎJ[b`Gc$H)à¢ÿZ bDFvä}Ôà3w¤¬§SR. H  À --- NEW FILE --- GIF89aÊ s7ÿß`Å®OéÑrÿé‘ÿï¯Æ½•ÜÓ®ÿõÌëâ½£›|õëÆ&$# bxàØd\véå—_60Â.=0˜hNÁ`Ÿå°› ½)gœtÒ çsÚ9'žzÆé¦›EÜW„G衈&Jň2º¨¢ˆV!Æ1Ðg饘fªé¦šžÇé§—~ꨗÆ‚ ¾¨êª¬¶êê«°Æš WÈÂþ€xóÁe€….aG˜Â²0„u¡ Xà!¸ƒˆC(â–D,aYxB 9‚ÌàŠXÌ¢·˜E1À`2pgà\ÑŠç¹âH0ƒ˜q0 ¼8ƒˆ!WŒçâˆG.úQ‹2 Ð-ô E¨AÊÐ…t ÷¡A &JÑŠZô¢ͨF7ÊÑŽZt5àâçfÒ‚,!à¤(M©JWÊÒ–º”¥ @€*k÷º¢$@ FX¦NwÊÓžúô§@í)ò®‚„IuæX{„Å4ÀY€€2  p [øÂ‰zB´¶`c5ØKUO bЂ›øÄ(N±ŠWÌbÇà',ÀD‡?Œ.)`A´Ê±ŽwÌãûøÇ=FÚ·Ì`cB`@H‚’—Ìä&;ùÉPŽò“§Ð„Ϙ¼ ^A_"€szùË`ge Ò ´üh`óeï:íñ€Ä´w°Kä›—P»úÕ°@¬ & Að/®ûk`a½¶°ÿ Œ5aÂNTžÿ@a S9„r6†«À7¶¸Åi©-Pnpín—8Ž0ð¶¸oc wƒ“çr\¹ËkÞÎ"ÀÀ)\³<‹ †(HÀ è‚A 6} Pzš®…Á Ä`=T;ÿùÐ>ª€.d`.‰L^ã £.VÐ÷ÿÝA*:º£<ª)„æO Г²2¤DZ¤¬òG–d¿²¤LÚ¤Q•R",‘×€ :ƒ €~ò·¥\Ú¥^ú¥ò' ð-, PI´«õ«¹ŠPY>apcôG\Ô$HÊú¬Y”ZÐ ­±uce™»™H‘4SÜ:SÛÊ­ÄõÿIÝ:®3EyP A@|>õKä®êSµT\ LDp{çz›†PZö PÒò¹lº û¹€ñ¹mAkP&y!€º.ñfÒ Â ’*2 `Áƒm8ÊÏÆl†R Ié[Ê¨ÊÆ¨,¨§(f‚\bÑÜÖ8 ¨Š¾èò>NÎéLöä, --- NEW FILE --- GIF89aÊ ~s8ÿß`Ä®QéÑrÿé‘ÿï¯Ãº’ÒÈžÿõÌëâ½õëÆÞÔ³  „ïU(|ð †ÿ>Æp1b óÍËù1K~ä UH! P†*Ì¡w˜ÃÍ!9K¸ p. Œ XPÂȘ [Àºà&\A R„€¯(E ¡ˆYp€Øî5@£ÓÈÆ5º1b8íÀeÆà`h4ã}Ò¨Ÿˆ`iÄ•}ä1x ™ç”œÒ$pU€ðŒ§<çIÏzÚóžøÌ§>éÙ~j@îÓ[( †#ìà M¨BÊІ:´¡=ð`DuX¹€T WÐ4ŠQ-tô£©GCJÒ‘zԣɲÁ VÊÒ–ºô¥0©LgJS;ŠÈ©NwÊÓžúô§@ ªP‡ºS`BòxN¡åÀÉÔ¦:õ©PªT›šÎʱM $ÿ˜!Ìá‚C _@ÁcÀ P Ô XÓ` [øÂΰ†7Œá$!n!p° æ¯]:ÁT(N±ŠWl*'ü`e!æÖˆU°WÜ$‘1ȱŽwÌãûøÇ@Þ± NPÿˆ!Æ3Þ«Ò IBÆLæ2›ùÌhN³šÑ,…cÉû± r ìóÎxÎ3>7p’Ì€  ´ Mh…š"A8©¢ÍèF;úÑ~4H‚‚ÚÕôҘδLM@’4@»D µ¨G T\¦h L˜ªªWÍjVZ .q.Z0g<0Á¶ÀcÞ˜ëÚ¾®‡MìcÀHIð„Cÿ3ac8"ÎŽ¶´+üK% ,6NÜbl_GSNÀ6‹©1ü1ÈAƒ ˆ+¡ ûÝ9ÆÕ ‚l‚¸H€W~ò ØÔ*6HÀÀÕ‘°?!4}IÜ‚6ƒÀÍvaÐoµTw€L³à„xr€]lÛ)0·Œ`NðþÊßôGÌì àd[¨÷o_ØI`"'OÆ ÅL0u™‘7cE¨À]ÿ‰¢õh¡å˜]0˜…y’‡9cí3£RŸØ™+e@# †ió š·<¦˜š¹ç "þ&P0‡ÐB-×ò¥`¦ÌR£SÉ“ØÀjn˜€lÚ¦nJº/"ÐlX§v:m²a)P‚!Ù§~šmR`$wdƒ7X¨†j¨Qš+ ÀppبŽú¨X¶ )0g`À?Ô7Tªäè{Ã>ëƒVíSªΤ:«D«¦Z«¸:ª  9µ¹*¾â]™+ #I Z jfì†6È´ãBŽC^äD~ä;ŽäGîãÚd„u³ --- NEW FILE --- GIF89aÊ ùøùüýþÿ ¨@Á-˜Â`ê±#‡#JœH±¢Å‹gì@(lË”* CŠI²¤É“(IR™ÂQ˜&bÊœI³¦Í›8sÖÜ€Bƒ°/]J´¨Ñ£H“*]jt@—/bŠaøãˆÕ«X³jÝʵ«W­+P§HÅ*Z‘Šb@ RŸ(ª 0âT )¶G£ N † dQ+ƒW°‚ @ŽWÌ£S°ÅØç \(ÀP€Ø/vl]¸À X°<á)ÏxÒóžöÌg=÷‰Oxîg/¨@JЂô M¨BJP¨€¥"èbBVò¢ͨF7ÊÑPkB©HGJÒ’šô¤(M©JW:Ò ¸ô¥I(Y¼#È@ Ð!Ì!P ã Øäò N°‚ lÀ.h ^ÐÌZ–Ž(€AË* º&–LèÁx°.a CÂKƒÜã2P3[èJ+ŒÓÊU§¹˜‡O+`¬8Àø®xÇKÞòš÷¼ç ¯z¥U× eÚ%Zfd@ßúÚ÷¾øÍ¯~÷‹ßª]ÍïÄ<¸Õ„ôéPN°‚Ìà)è >ÔzÍ? Û×ÇKEÿ,âúˆÖ'0`¶´5ÌFLûÚ0(q ¼ þø €Lœ  örø ?ä{q `Œ €Œ‚aŒà5p ðñ‚ #p-sõ¿Ø(¯6~20ô%ÿŽáXŽœaŽèHŽô¥Òå3¨Êà‹Âà=R@ȆlT`O– Ù81ÛØ݈ ZÖf )$ ‘² éI’¥( ÿx]ˆ ™à_@ƒ"-"")’B’&Ùb%òîx‘ñÈ€Á;à*Eð<#5™“8i“;h“F`žÁ+ ¼x óð‹_°ç…]Ø +”– T$`ù¸¤LŠlP 6€š§ðoÙC¨ƒš¨ˆº¨‰ª§Ð m–Xm$pÈwtGÑÖÉÔ†üÉæÛÖm²!Zª‚©Ìbáƒ+¨‚(‰‚ZÊ™= o¸,d;Âdí6„¯ôJ:àI¨ËÁœXÁœËñ&#`/ Pbî7Ь¯æƒ,á³rqšÿv†¡>€Íbÿ@N @íC>Ç2pßsÍw=ÑÒTÿÍk6B75p¼ŒCA”(08P( 7”° VûÏöœÏ8ÐzÓ§9pAw³8ýÐM´ôƒÕªY UYõ´}'PÁjP.°SÛÛÏwô´uQ p|yÆQÉ}QÍyPÁ‡ËRšùhJ žÓR³”gÑ5¨{ºàýݨ+Þá=Þá}ºŽËyq,è]ÞüpÞä Þa7Qßö}ß‘¼´!ÉKð)à(±9ó¡~à5ñ¾à N‘âX­3nÁÓ_qážá¾á.#;<%ÝÄ">â$žjB×{œâ*Nk¾Ñ¤.N(½Ñ€¤<%ã4^ã#&ð¥:Ncœ é†Ì@äBždéVä>PäLÖd --- NEW FILE --- GIF89aÊ )-A *qzŸ)?@ ­.F "4v)] , _r¸l}¾:B_xˆÃZeLUvˆ–Ê‘žÏ—£Ñ’žÊv»Up°Qx¼Wm¦Q}¿^„Âfz²^ ŒÅp‘Èv”Êz“Éy‘ÅxhšK):‚ªf&`~GpUPk7 CP.·ÛpÕê¬åǫ̀ÓQ„£EÇãßî¿ÓÕ²¹º•¡¡€ÍÇÿß`Š=ȱRr8ëÓs¥•Sÿé‘ÿï¯ÿõÌîåÀéß¹õëÆ)&$xnjB:: ˜‚/ÂÄìð1C†Ã‡#JœH±¢Åˆ3|ìH8¤Š• CŠI²¤É“#©T’PL…#J (A³¦Í›8sêÜÉSf‰'*ãÒÅÀ€£H“*]Ê´©Ó§J tA˜iÇ$X³jÝʵ«×¯`¹ùÁRÓ×4lÃAApÿãÊ•Ûåž\ èE à„‚ òî…û—°Þ‚Ôe€XA ¸ˆâÃa —3cÞœY¡@hìØqY LCbˆé©Çi1:dˆyMcF Ó¨c¨fÝ£ìjÍÀ9 ¿ìƒu€)S%Ê(R¦|ŒRú*T˜O‘b¥ytäË=fgÎ=Šó)Ä`8A3¦ûŸðßË/!†| bšH€©} ˜Ð0ÂX {b `¢†rø¡Š]¨8@Œ-ž(€ i¥”ZšibP`€ †*ꨤ–Jj}¦¦ªêª©š` ‡Æ*무Öjë­¸âZ@`ˆÄ˜À+ì°Äkì˜GDb EŽ\I_Ø©AØ™_(¸f-h–íÒ¸C–3Ô‘º©ë® ïÂ+o¼Å V ºÆšà$ ™ŠÊ1Ážµ H«X€›ÖE¡Ci=òe¨œmšYÇÖ„°À¦@¨Ë[™°„%””£Jè-öŠ [xÂA Áuß L°‚šùÌhè \w¶9RôÍp޳œz 0ÁN0?íþ» @À¡'Ý Q …#ð`"!à`õ1€b°"`6S ó ‹µ˜6O˜“õ¶ ˜Àè^ ‹½‘$VH…]c`1hi²>É àK eB×…V™eKà=A)”²ˆ$sOd†%03ÞbŒL™`OY‹÷À†nùP¨÷”hió°–Q¹s˜—•• ÀK9“M™ ö L:Y˜ËdTQPLrÿ”ŽiM<_™ À4 q‰òàžºQeåtP Ž‘’ž’²ž—ÒžêéžìùžòŸëiT0¯ñ¬²ŸüÙŸ¥‚›k¢"¹2 Z ª4fƒÇ²  Ú ÄBňËÐÌ™ ˆazš¡š  d`à=Ù“=•Ö{÷=;¥ó¥Z¥ Ð ,0Bû8ùCrb*¦ t¦jº¦ùS<0Û'<ž Oô$O/ÇBt:tWÖ9êässj§ñô öÁFl”àF†º¨IÔXŒú¨%@cU‹°G|d©½ƒ;}¤;nI™ª;“4 0C Q„>8cà†ƒ@8ÊG H  --- NEW FILE --- GIF89aZ% ¥B¯dî÷†Ó‰F(%.,+06648Š‹Œ‹B<?? ’˜ à„Æ`…f¨á†*ˆÿ ²]wÞÑ 'üþ¦ïÇß{òqú„$ôÞÍï¾´ ‚$Ñ÷>£õ" ?§B ©……@GNˆ£ÜÁ(¼À Èc†À@[„zˆÂ ̰…xðÅLè 8ñ‰ "3BxBŠpŠGŒár¸CIq…` £ÇHÆ2š±ŒFLcg<ã@Üâ‚´ãE¿öÁ´zÿ=0AöÈÇ šÐj§;á®EqgÇLx¢!xmÿISú 5èãõ@êz1³öÚ· sà -bšŽW<Ò oyÍ{ 1.@p9£‚ F28& ¸Ã2–F#Z±†ía°†Cèà {øÃ 1H÷PСYð»¤Å3Ê#N;¢D\ú}xäX©Þ2Wp\®Ũ/å’“„̦*ȃ‘ fÄ&ìp«A:–ñ‘šäc+Á€NV¢2Œ€|!Ç @$ȱŸ¶œc/9ÈLÓ“{|¨6»ùÍpT§v -“Q«v’ð€ ÜžÎÈDú}Ü#eIƒ¶ž¡£G‚pÕ‘(žôd`?]oLÑk’ Ê÷Gëè€Wÿ±Ôžñp}Â#_“R úókÀŸ ìbW»Öù^÷ýܽC¼ä„(Þú¶DÖBZ4(1qPj/\»Ñ º®ª5IVc2 NŸú8­~L"0}}¬‰­½G(ØÑÕ¨\µµm²§Öš4zÙG¨kxÓ=Ö¼„ ×{ ök›}ÕŽ¤`Ó·þª­¦üÞÿà÷V£ŸÝÆOþòs-oz“Nß¾K"H1BÄ=O^-@`ÛZ¸‰e€ÖƒXÿÈ… °bë¶Hsê†n_Aï…Ú€[pîÐ ç5¡ QÿvC1€Ò WÐ Öˆ A X˜p5óWq±md v.ÂÕš‚Zò·"«% 0T ‚ì…3£@>8„^ --- NEW FILE --- 8BPS  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹° ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ8BIM         ÿÀ   ÆÉkŽ5óŸ›ÔÂ8¸1gÖ¯°[ŠA°ØÐ\ÂÁPÛ½¾ªÇý¹¿ŸwéhR9Y£f­{^ܽ®.mV—=د`õYêRìv{Ûþ‘PoüÍõ±öoßéŸCo«·nú}iüÏWw£öÿ àn>JáŸä~*žFíÚÇÉVÍòê´¿ÿÙ8BIMÐkoru \ [þfë? [ø}gÉ blue lines g %  Š 1  2   ý ó ý û ÷ ñ ï §ŒqV>*í •y^E0 í òk ifb[SLA8/&þ SOJD=5/& ð OLGA<3+$í MID=7.)!í ø¦þ¥£¢—…yl^OC7*#þ sg\PD9.%í ø¦þ¥£¢—…yl^OC7*#þ sg\PD9.%í ý ý   ù ù ê÷êÒÚêÑêçæãßÝÙÓËÅ»°¥™‹}o`SF:/%É÷ɵ¼ÉÑÉÇÆÄÀ¾ºµ®§ ˜ƒwk^QF<2( <÷<58<Ò<ÿ;:9986531/,)%" ÿÿÉÿôèÚ˹©˜…tcSE7+" a÷aX[aÕaÿbÿaÿ_^\ZYUSPKGB<61+%  –÷–‡Œ–Ô–ÿ”’“ŽŒ‰…€|uog_XPF=5,% ÿ÷ÿ  þ eu Dÿî0DÿÎ ªÿD eu Dÿî0DÿÎ ªÿD u zÿÿûöýÿï¢Pô þùÞëýüÍY V…~‚†xb<ôV…þ~€ƒyk9öV…ü~ÿ€{o=øV…ú~€qB"úV…÷~‚qF(ýV…õ~€†tT5V…ô~…†l6V…ö~ÿ€^6ýV…ù~€|`2ûV…ü~‚€x`,ùV…þ~ƒ€r^$ö V…~~…ƒrZ'ôV…ƒ†nQ)òYŠkG'ðFF%îÿ "(xº°¶¼¨ŠT$ô""(xºþ°´¸ª–P$ö""(xºü°ÿ´¬œV*ø""(xºú°²´²ž\0ú""(xº÷°²¶žb8$ý""(xºõ°´¼¢vJ&"""(xºô°º¼˜L$"""(xºö°ÿ´„L,ý""(xºù°´²®†F*û""(xºü°²¶´¨†>&ù""(xºþ°²¸´ „2ö" "(xº°°º¸ ~6ô""(xº¸¼šr:ò""(|–d6ð""(bb4î"ÿ" ÿ33ÿ33ÿÿ33ÿ EgE1 Ý´Ýÿ ´ÿ ÿ™™ÿ™™ÿÿ™™ÿ N$3$2 Ý»Ýÿ »ÿ ÿ™™ÿ™™ÿÿ™™ÿ TFgF1 Ý¿Ýÿ ¿ÿ "  .T{©ÃœÊìÊÅǘÊÔÊþÉÿÈÿÇÿÆÅÄÃÂÁ¿½»º¸µ³±¯¬ª¨¦¤¢ Ÿ›ô™ùÿþï´]õ Y¥ ΰuQ  ŸŸžœœ››šù™À ˜úÊþ  2`‹¾Üœäìäâã˜äÐäýãÿâÿáÿàßÞÝÜÛÚÙØ×ÖÔÓÒÑÐÐÏÍôÌùÿþï´]õ 1=DýHD=1 þ rÒ 1=DýHD=1 þ 7V|ªÅœÌ̧ÌöÿöÕ›kE'  %?[|œ•알˜•Ô•”“’‘‘‹‰‡…‚~{xuqlgb^YUQMIEA>8ô3ùÿþï´]õ E••c E•• Qy E••c (J ý•Œm‚þ•ŒmŒ••myï•ü•my•• ••mþ Œ Œ•‚ þ c< cQ (• )û30$6õ --- NEW FILE --- GIF89aÊ $"1 ‰±)?@ •.F "4v -)] _r¹Vf HT‚l}¾ :B`)/DxˆÄˆ–Ë]f‡NUp‘žÏmw›•¢Ñ“ ÎŒ˜Ã—£Ñ†Âi£ÑÛíÒ»Ô¬ÒçÆt˜YXpBKd0ª¸›Îæ±kxY·Ûp¨ÓQÇãäñÉŒ“yž¦‡>B/$(27  —•C s7ÿß`Ä®QéÑrÿé‘ÿï¯Å¼”ÿõÌëâ¼ÛÑ®õëÆGD at vrn(&% JhŒü 0P ©Ó§P£JJµ*TnbZÒ£ˆW¯C¾ŠK¶¬Ù³h¿éqóˆ×ÿ>€ã¥?|xóê…Ðå^Þ n ˜wÁg˜1ƒ  †Ì /„Æ%?è2x¯ç| ¼œä‚ãˆBräÀá£u>„°ˆíc6Ø­g«f½à´jÚBzøˆ[µñãÈ“÷P"fI”()¥<‡EÊ”(U¤&P P@~øP yu[Ö{€xÇKÞòš÷¼èM¯x“ú  ’8ø‘$’¦(€8³:S‘<³ 9 M at n2ö!.r“6™“.‚ å1À—ŸàœáÙö¹h›¡óÆ ŠþYi¨´œ™ i»XAe爎y‘  :Žª ZŽÚ ê a_Pb(Ò(Ú¡ú¡º¡«Aš*(z¢*Ú),š¢-º¢.£0ª¢ÙAI`ÿ,bµ²£<Ú£®’…f-",DZ¤FZ¤–L`dG•Ðò¤P -Nº%=°‡Y”× jwôw}^ú¥`J^¨¶W+P€x¦hz¦H)LPù¦púlQðX”‚Cx§xš§*é'M°„Zø§€¨îƦF憆z¨ÿö”Â%pîreNpzô“‡i3©LÅT×}1?—J?KÕ©> j©¤:ª¦ZªÏs¸² \* +°à'(£+¦‚|dÔ-p**+ÐÀ bÙÖÀ, G’ œÀb*Â/r" ø€ÿ'€Ø€ÈP‚ÉØÉÂÁ€iº_%¡Ëf)™Âè¦åÁÒ‘ÊËš"‚h¥B˜§!–mH‘Ë&1!ÓvLƒÁÜmÝ6mÆüa(Ph Ë"†LÀn%’„6†…OxnWx„YènôV…Øìÿ§ZØ;Jpo^HÎDo_x†ùv†ç|o øˆÚo?@3ÛØgs7úœÏ˜YÖ‹Ì’1ºµ%GÐ p–ð³ ÐxâÏÕs¾«Ðëx¼xóMÞu&€=0 --- NEW FILE --- GIF89ax # —¿H-9\t- ®×]:H s@ Ã\µÚl¸Üq‰¢X¿ß€Âá…fuJ½ÖŒ«Â€Îç™Ì3¡ÐC¡ÐD¢ÑE¤ÒI£ÑHCU ¥ÒL¦ÓM§ÓO£ÎM‚¤>¨ÔQ!)«ÕV¬ÕY°×a³Ùf´Ùi·Ûo¹Üs»Ýv¨Çj½ÞzµÒ{LX4Åâ‹ÆâºÔ„ÇãÈã‘6='”¨lÅß‘Ê䕱ǂ¢¶y%*ž ™ÃàðÖò~À°áÇ¿~? \€—à~þ ¸Þ†!,þ€PÞÅŒóBŠd¨Ä‚É“(Q&LiÒZ“(øðd‚2 è{Ù²ÞÌÿ#jZˆùS¨‚$ q²`G$]ʲªU KBTØÊµ«×¯`ÊK¶¬Ù³bC$ñ±#¡ ˜ÉK·®Ý»v;xÀË—®Þ¾€ƒ¡ôÇ Œ/)`žIzæðã/y@¿¾}û‡è·¶Ãþ Òâ0@£Š6â¸Ã?¦ˆ¡)”â’+>ùâ•X.¡Â–\véå—`nÉ‚~a.à \š‰&˜c: ªh£F*èz Hjé¥>Šé šnŠéý@K[»”jꩦÊDp5LÙ«°ÆÚÅ„ aŸ¸æªëšºâÊk¯ÀòiÃHüpÕ±È&«ì²Ì6ÛìXF+í´Ñ6Ií´Ö^«-µpÈêí·­Ìgâ}P8î¹õ-ˆÿ[¢¹ìÆ[ß;#ÍÓÐ<ÖpPï¾ñTÄï¿þÎÓÑ¿‡T\|Éu—œ5à•÷B ¼‡\ `À (  P!§ÀÅÇ-ðpÄÉ- T4Ìq@›|OÊǬÜ*i<pt!A `ó$ƒüpÉÎ=ÿüC!8 °Äå¤Mæ›îަ%„IPÙpvÀ˜P ¢{>ŠÅàBÂúE„>üÀƒÈ—Áæ0Bðª–ÈÄ&:!eB --- NEW FILE --- GIF89a» sq wrB O|Y… “•F—mŸ¢¬G¦ˆ±ž*²µ¶·¸¹º)#:¿ÀÁÂÃÄÅ)>rÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÔ—rÚ,ÝæÎ. –Í,Pˆ¯æÍ 9w0ª ¤Õ…*ÖÜʵ«×¯`ÊK¶¬Ù³hÓª …„@¼J·®Ý»ì ÊSoK ãî½áBêÕ·~ ø`E å©çž¶, (Œ‰æ „ê¥c(„£bÏìÄè£Z“¥¡”Vj©‡Š8á•ñ¹À§ N"˧|î™|ðŧjªr(0 ß%Êël³Ð&+-+ìdíÿRØ273Ì]ë-¶Þ~+®J9ŠÏ¶ãŽ«¸ì~ûOºíÆ ï¼òb›Þy¥ñœz©öTVüƒ\Ú¥ÂçE÷ÝûÖBrÀµ¥ g ¢¾nMFן)ÝDaÕð’3@ÐL[ØÐF Œ3`øá I³®3üÀ·ß)}´· --- NEW FILE --- GIF89a» F •A ‚—B ˜šNoF¢tvBVXšœ£uC­ ]²¤·MŸ‡NT¿ÂÃÄP” ”sÅÍH)#:ÒÓÔÕÖר)>—ßàáâãäåæçèéêëìíîï矗ì,ðúâøâìH° ºí  B@q Gh ¡ŸŠÂ4jr€S¡[“¦XºÑéÕ‡8×­ Ó⟀À`Üm¶äW‡ÿm­ÐÖß Þ §#½÷•ƒ¢Õö’øSÞS†hås#^©å–\vb4£—d‚˜e™h¦©æšlv¹‚¿µ)çœtÖ©å÷L0CÙôé矀ú”V4 Hlˆ&ª(1 \ qÚ)餔Ò (u¦é¦œ¦uf¥ †*ê•Á8± $ ±¨’ñq?³Šrê<ªÌbpϹL€s·–®&Š:ä3Nnà¼ô€ ‰ãMäÜMúŸz’§¶œ®œÄŽ €¡ÍŸ$ «&¢œÆ¢«—ȾcÊB¨› % ÍŠÁ±Ï^3(ÿ¼0Ÿ´.Úk¹{±Ó¹^r€ªª +âEÝÄö¦þ&E÷ÃØô2ï°z(áÔ¶¯O²ûÚí~;ìÏoÿ:kÃÔý }6ëÿ --- NEW FILE --- GIF89a£ † ‘¥¨¶¯©$¸ ›"  ˆ†4ÌÍXLÕÖרÙÕ 9ÐÍà óòl-Ìp2'Âë œéÓ¨S«^ͺµë×°cÇÞWZ ÂæhèÞÍ»·ïßÀƒ N¼¸ñãÈi0biq²£KŸN½zuÚÏ Õ@ De‚ $ Ò$ FÒ ±ökeœ‘+Ù;f¡cµÎ¾}÷³åEù·¤JZ{€ýl®¿~µìí§0c%ïCˆù y!•ŽTñ€ý·™0s¹ ‹3½P‡#P¢*4(‚”¡‰"°Ü©Ø ò0f£Ú°¶¶Ä¤œá@âW¿8ƒ¤BÖéNE²`급HàOQŽê˜C¬)uÄÊf~·°5¯j§˜‚ E’°Àk$I --- NEW FILE --- GIF89a» # —¿H-9\t- ®×]:H s@ Ã\µÚl¸Üq‰¢X¿ß€Âá…fuJ½ÖŒ«Â€Îç™Ì3¡ÐC¡ÐD¢ÑE¤ÒI£ÑHCU ¥ÒL¦ÓM§ÓO£ÎM‚¤>¨ÔQ!)«ÕV¬ÕY°×a³Ùf´Ùi·Ûo¹Üs»Ýv¨Çj½ÞzµÒ{LX4Åâ‹ÆâºÔ„ÇãÈã‘6='”¨lÅß‘Ê䕱ǂ¢¶y%*ž ™Ãàc6€~€‚bƒa b9ex5?785a…‡¢:8§/©a§¢}t²rvo™~I—a431¾33Ÿ8·¥|¼¾ÀÂÃj/{4;\=‰fÆ8›»½¿ÁÍÅybÙÙk8/œ¤³ëgµìïðñòóóI Ìjì±È&«,§I0àì³ÐF S´ °0ìÎθ  À¦ 9 -·Þþ Ì«ð 7Ìð*D,ñÄWlñÅGÌ@wìñÇ ‡,òÈ$_¼Ä (§¬òÊ,·ìòË(§Ð nøáˆ'®¸Âî´aÃã?ö,6´2ùås,±ì¯Ôà¹çæºù¬˜Žnz¯µFÚÑ鬷îúë¿*!\eýÿB³÷uAî¼U»Q?ô.üðÄ—vY áRBGé¥iŠéK[–à˜Ï, 3ð5 ªÄÎP<(vC‡•CbñÁ×n¤yŽ ˆL⑘ˆ„#”ͬf7ËYÎ.ÁA¢@D Кö´¨M­jý³ 1ï }­lg )á‹´ClsËÛÞv¢>*Á~V ÚÒ÷¸ÈM.ƒ t À ù›t§KÝê.¡ B --- NEW FILE --- GIF89a» # —¿H-9\t- ®×]:H s@ Ã\µÚl¸Üq‰¢X¿ß€Âá…fuJ½ÖŒ«Â€Îç™Ì3¡ÐC¡ÐD¢ÑE¤ÒI£ÑHCU ¥ÒL¦ÓM§ÓO£ÎM‚¤>¨ÔQ!)«ÕV¬ÕY°×a³Ùf´Ùi·Ûo¹Üs»Ýv¨Çj½ÞzµÒ{LX4Åâ‹ÆâºÔ„ÇãÈã‘6='”¨lÅß‘Ê䕱ǂ¢¶y%*ž ™Ãàb‰a Œb9f9?/8;˜e6/5/6cŸ¡c…ŸˆcƒŽ“a6†Š5?«t¹ivq ?6?´d?58431Ê33¬4/Á7;\=Ãdx”c Ùad:âä:ÇãÞ?©Åc¶6kk¶ºùuJúýþÿ Ä‘ }yà‡¡H“*]zt©Ó§6—`˜JµªU z°€!Ä ªòÄPàG TY*àÊm LUËÕ*KS/lKµ,4„0@À/à®B\(K /Övl T-«`êUY†°°øÚ« C‹=z‰…Ó¨S«æ|Á‡ VóŒM`Ã$ðÆ>ÃÍœ}ã]}€ÃjØ^7À.|›çV Ì“x=ëíky?Fb€®…Ù¨½‡ð@ÃêóèÓ«O¿$D…÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ÷yõƒ;ü°Cb €¤à‚ 6èàƒvà„Vhá…f¨á†v0ÿX;øD Åà %¦¨âŠbİD 0Æ(ãŒ4Öhã0’@Ž<öèã@)ä6.ÑH&‰ä 6Ü¢ä ¾Dp$ 6è ä•JB çžs‰Ó&Ô©€œu‚ ãq°@¥—f )p0é#'£p–u© IŒ Œ`Ë þ2À¾ìÀ¿ˆ °o ,@0Â?pàp¿) :ñ¾( °C e,ôÐD]ð*$­ôÒL7íôÓP'msÔTWmõÕXg­õÖO/±Â×`‡-öØd—mö×)4pöÚl·íöÛpÇ-wÙK°ÀÜx—vÞ|÷í÷ßo/PÖ àìCˆ'®øâ‹!€DÁÔ0‹”Wn¹Š64ÀõçMO ú褗nºÖM:»Þꬷîúë°Ç.ûì´Ÿ·ÿ„Ѹç.ô ì`a â¢:E&<ÉÀF €„ ˜ÅÔIWŒâÅÅ¿Œ VÈ„šì¤'QÁf6c"£\(ªú&L4s–²@åœPy° cGÔQB ]B --- NEW FILE --- GIF89a» ¦¿€œÀ^¦iÄÞ˜o}W¦ÓN;K‘¸F‚¡E¸Ür¿ß€»Ö‰™Ì3¡ÐD !)®Ö]g~7Td4ÆâÆà‘7>(Êä• ,5 ŒŽ‰ŽŠŠob'e'%b'"€}' "©"I ¥c£¥›¯y‚d ¹ˆŠÁ‰ÂÀĈÂÁrd'a'®°¤§ÙÙ›Ñ#"'a%\'Þäs±b Ód E`#ÏI\Õ#§IÝaØÚÜa¾Ñ ¤äŽî –ÌR/†É’x炃Ný¼+Gçâ½=1’ ™‘L –lè[âDåún81Õq˦5l&+¡Id²£—¼F=Aƒ†Ð0k„éßÀƒóVÜ.‹ 3& ¡°ÆÂ3L8áA‚à–[ãfMz $À³>ÑÚ»iÔŽ7EF/= ìÕ—©Ÿöaåï ƒ‡Þ9ºÿèKP€Á€˜Á_øÂC¿4ø‹€F(á„Vhá…f¨á†vHÿA|³A8eâ‰(¦¨âŠ,æDA‰€@vôñÀŠTs#B%)ä%…°„PHFä’à \@ç40èÊÀ¡Œ6ÚèE:°¨£”Î)i¥˜fŠé‘tÊÀ!„*0|òbêr‹pA§p Z§°r°I±Öjë­¸â:Š­$œë¯±î ì­ k¬­KX ¬²¸ìB˜%Ì‘L‚ˆ1¸Ü2Ë.[ÁdûA·ÙŽbdÙ~SÏt ÿ,;"(›n¶Ë>áÁ²›8àí Ê~“­4`¸ê-Kî²æ*» ¼'¬0¼GVЪÃ0p´Ã Öœ‚Ê8Œwü°u4@ÃRÁ P òÊÐZÁ‡$‚ÆÁ 1{@ò•ïê1Ì/Ÿ"‰KòËôzÂ'sYÎ)³¬²ËyŒóÔRWýpÎJ ­õ_3·`ÆÊÀÖd;¼ heâpgtp6C‹L³ÃrÛ\vÒNt`ö mó» Zð‚\Bô8à‡™…dìÃR¦‡3šð„(¬ž-ô  ³u®%:ñ‰PŒ¢§HÅ)òE8 ˜€q†E„ ’X„a Ñ@Çlà:Ài ÈÂ Ç $xÛ(Áû¸ÿ;J¨UÎ/Šê`¬Ä/Àf‰À f¶‚Ì!'p¬F«µ‚Šy+PP²S߸¤±V8‚fý1Œ}ôÓ PŒÅ ™ø´ `›¥ó£q§:ÙéÎY–ÄäĤ4U©%T¥4\Û¦ƒ†‘ˆKðIÛT† L3ðS¼8+œŠUþb*Åœòª áèOÂ) Ž<£ºä›¤q äW–ÓhíXËʳ„Éí31[Žó—oªÇû,:4 !€y¬–è4¦±(åC ŠLgª Üd'™)N2sß¡8A From tipaul at users.sourceforge.net Wed Jun 5 15:05:21 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Wed, 05 Jun 2002 06:05:21 -0700 Subject: [Koha-cvs] CVS: koha/marc perlmarcstructure,1.2,1.3 Message-ID: Update of /cvsroot/koha/koha/marc In directory usw-pr-cvs1:/tmp/cvs-serv28452/marc Modified Files: perlmarcstructure Log Message: Proposing simplified perlmarcstructure. Interesting mainly for Steve Index: perlmarcstructure =================================================================== RCS file: /cvsroot/koha/koha/marc/perlmarcstructure,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** perlmarcstructure 29 May 2002 22:11:20 -0000 1.2 --- perlmarcstructure 5 Jun 2002 13:05:19 -0000 1.3 *************** *** 11,32 **** $tags is a hash reference ! $tags->{1}=$tag ! $tags->{2}=$tag ! $tags->{3}=$tag ! $tag->{tag}=110 ! $tag->{indicator}='04' ! $tag->{tagid}=573498 ! $tag->{subfields}=$subfields ! $subfields->{1}=$subfield ! $subfields->{2}=$subfield ! $subfields->{3}=$subfield ! $subfield is a hash reference - $subfield->{mark}='a' - $subfield->{value}='MacDonald, John A.' This takes care of possible repeating tags and subfields as well as ordering of --- 11,45 ---- $tags is a hash reference ! $tags->{$tag} ! $tags->{$tag}->{$tagorder} ! $tags->{$tag}->{$tagorder}->{indicator}='04' ! $tags->{$tag}->{$tagorder}->{tagid}=573498 ! $tags->{$tag}->{$tagorder}->{subfields}=$subfields ! $subfields is a hash reference + $subfields->{$mark} + $subfields->{$mark}->{$subfieldorder} + $subfields->{$mark}->{$subfieldorder}='MacDonald, John A.' ! Sample : ! bibid=58973, ! 110 ## $afirst text $asecond text $bthird text ! 120 ## $alast text ?? ! 120 01 $nno, another text ! in perlmarcstructure, it can be writen : ! $record->{bibid}=58973 ! $record->{tags}->{110}->{1}->{indicator}='##'; ! $record->{tags}->{110}->{1}->->{a}->{1}='first text'; ! $record->{tags}->{110}->{1}->{a}->{2}='second text'; ! $record->{tags}->{110}->{1}->{b}->{1}='third text'; ! ! $record->{tags}->{120}->{1}->{indicator}='##'; ! $record->{tags}->{120}->{1}->{a}->{1}='last text ??'; ! ! $record->{tags}->{120}->{2}->{indicator}='01'; ! $record->{tags}->{120}->{2}->{n}->{1}='no, another text'; This takes care of possible repeating tags and subfields as well as ordering of From amillar at users.sourceforge.net Wed Jun 5 19:19:06 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Wed, 05 Jun 2002 10:19:06 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.10,1.6.2.11 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv24847 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: All mapping of MARC tags to Koha db fields isolated to one subroutine Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.10 retrieving revision 1.6.2.11 diff -C2 -r1.6.2.10 -r1.6.2.11 *** marcimport.pl 3 Jun 2002 21:02:08 -0000 1.6.2.10 --- marcimport.pl 5 Jun 2002 17:19:04 -0000 1.6.2.11 *************** *** 84,87 **** --- 84,114 ---- ); + # tag, subfield, field name, repeats, stripchars + my @tagmaplist=( + ['010', 'a', 'lccn', 0 ], + ['015', 'a', 'lccn', 0 ], + ['020', 'a', 'isbn', 0 ], + ['022', 'a', 'issn', 0 ], + ['082', 'a', 'dewey', 0 ], + ['100', 'a', 'author', 0 ], + ['245', 'a', 'title', 0 ], + ['245', 'b', 'subtitle', 0 ], + ['260', 'a', 'place', 0, ':' ], + ['260', 'b', 'publisher', 0, ':' ], + ['260', 'c', 'year' , 0 ], + ['300', 'a', 'pages', 0, ':;' ], + ['300', 'c', 'size', 0 ], + ['362', 'a', 'volume-number', 0 ], + ['440', 'a', 'seriestitle', 0 ], + ['440', 'v', 'series-volume-number', 0 ], + ['700', 'a', 'addtional-author-illus', 1 ], + ['5xx', 'a', 'notes', 1 ], + ['65x', 'a', 'subject', 1, '.' ], + ); + my ( + $tagmap, # hash ref of mappings + ); + + #------------- #------------- # Initialize *************** *** 92,95 **** --- 119,124 ---- my $dbh=C4Connect; + $tagmap=BuildTagMap(@tagmaplist); + #------------- # Display output *************** *** 259,401 **** my $marctext=$marctext{$record}; my $marc=$marc{$record}; ! foreach $field (@$record) { ! if ($field->{'tag'} eq '001') { ! $controlnumber=$field->{'indicator'}; ! } ! if ($field->{'tag'} eq '010') { ! $lccn=$field->{'subfields'}->{'a'}; ! $lccn=~s/^\s*//; ! ($lccn) = (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '015') { ! $lccn=$field->{'subfields'}->{'a'}; ! $lccn=~s/^\s*//; ! $lccn=~s/^C//; ! ($lccn) = (split(/\s+/, $lccn))[0]; ! } ! if ($field->{'tag'} eq '020') { ! $isbn=$field->{'subfields'}->{'a'}; ! ($isbn=~/^ARRAY/) && ($isbn=$$isbn[0]); ! $isbn=~s/[^\d]*//g; ! } ! if ($field->{'tag'} eq '022') { ! $issn=$field->{'subfields'}->{'a'}; ! $issn=~s/^\s*//; ! ($issn) = (split(/\s+/, $issn))[0]; ! } ! if ($field->{'tag'} eq '082') { ! $dewey=$field->{'subfields'}->{'a'}; ! $dewey=~s/\///g; ! if (@$dewey) { ! $dewey=$$dewey[0]; ! } ! #$dewey=~s/\///g; ! } ! if ($field->{'tag'} eq '100') { ! $author=$field->{'subfields'}->{'a'}; ! } ! if ($field->{'tag'} eq '245') { ! $title=$field->{'subfields'}->{'a'}; ! $title=~s/ \/$//; ! $subtitle=$field->{'subfields'}->{'b'}; ! $subtitle=~s/ \/$//; ! } ! if ($field->{'tag'} eq '260') { ! $place=$field->{'subfields'}->{'a'}; ! if (@$place) { ! $place=$$place[0]; ! } ! $place=~s/\s*:$//g; ! $publisher=$field->{'subfields'}->{'b'}; ! if (@$publisher) { ! $publisher=$$publisher[0]; ! } ! $publisher=~s/\s*:$//g; ! $publicationyear=$field->{'subfields'}->{'c'}; ! if ($publicationyear=~/c(\d\d\d\d)/) { ! $copyrightdate=$1; ! } ! if ($publicationyear=~/[^c](\d\d\d\d)/) { ! $publicationyear=$1; ! } elsif ($copyrightdate) { ! $publicationyear=$copyrightdate; ! } else { ! $publicationyear=~/(\d\d\d\d)/; ! $publicationyear=$1; ! } ! } ! if ($field->{'tag'} eq '300') { ! $pages=$field->{'subfields'}->{'a'}; ! $pages=~s/ \;$//; ! $size=$field->{'subfields'}->{'c'}; ! $pages=~s/\s*:$//g; ! $size=~s/\s*:$//g; ! } ! if ($field->{'tag'} eq '362') { ! if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) { ! $volume=$1; ! $number=$2; ! } ! } ! if ($field->{'tag'} eq '440') { ! $seriestitle=$field->{'subfields'}->{'a'}; ! if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) { ! $volume=$1; ! $number=$2; ! } ! } ! if ($field->{'tag'} eq '700') { ! my $name=$field->{'subfields'}->{'a'}; ! if ($field->{'subfields'}->{'c'}=~/ill/) { ! $additionalauthors.="$name\n"; ! } else { ! $illustrator=$name; ! } ! } ! if ($field->{'tag'} =~/^5/) { ! $notes.="$field->{'subfields'}->{'a'}\n"; ! } ! if ($field->{'tag'} =~/65\d/) { ! my $subject=$field->{'subfields'}->{'a'}; ! $subject=~s/\.$//; ! if ($gensubdivision=$field->{'subfields'}->{'x'}) { ! my @sub=@$gensubdivision; ! if ($#sub>=0) { ! foreach $s (@sub) { ! $s=~s/\.$//; ! $subject.=" -- $s"; ! } ! } else { ! $gensubdivision=~s/\.$//; ! $subject.=" -- $gensubdivision"; ! } ! } ! if ($chronsubdivision=$field->{'subfields'}->{'y'}) { ! my @sub=@$chronsubdivision; ! if ($#sub>=0) { ! foreach $s (@sub) { ! $s=~s/\.$//; ! $subject.=" -- $s"; ! } ! } else { ! $chronsubdivision=~s/\.$//; ! $subject.=" -- $chronsubdivision"; ! } ! } ! if ($geosubdivision=$field->{'subfields'}->{'z'}) { ! my @sub=@$geosubdivision; ! if ($#sub>=0) { ! foreach $s (@sub) { ! $s=~s/\.$//; ! $subject.=" -- $s"; ! } ! } else { ! $geosubdivision=~s/\.$//; ! $subject.=" -- $geosubdivision"; ! } ! } ! push @subjects, $subject; ! } ! } # foreach field $titleinput=$input->textfield(-name=>'title', -default=>$title, -size=>40); $marcinput=$input->hidden(-name=>'marc', -default=>$marc); --- 288,316 ---- my $marctext=$marctext{$record}; my $marc=$marc{$record}; ! ! $bib=extractmarcfields($record); ! ! $controlnumber =$bib->{controlnumber}; ! $lccn =$bib->{lccn}; ! $isbn =$bib->{isbn}; ! $issn =$bib->{issn}; ! $author =$bib->{author}; ! $title =$bib->{title}; ! $subtitle =$bib->{subtitle}; ! $dewey =$bib->{dewey}; ! $place =$bib->{place}; ! $publisher =$bib->{publisher}; ! $publicationyear =$bib->{publicationyear}; ! $copyrightdate =$bib->{copyrightdate}; ! $pages =$bib->{pages}; ! $size =$bib->{size}; ! $volume =$bib->{volume}; ! $number =$bib->{number}; ! $seriestitle =$bib->{seriestitle}; ! $additionalauthors =$bib->{additionalauthors}; ! $illustrator =$bib->{illustrator}; ! $notes =$bib->{notes}; ! $subject =$bib->{subject}; ! $titleinput=$input->textfield(-name=>'title', -default=>$title, -size=>40); $marcinput=$input->hidden(-name=>'marc', -default=>$marc); *************** *** 656,660 **** ! $bib=simplemarcfields($record); $sth=$dbh->prepare("select * --- 571,575 ---- ! $bib=extractmarcfields($record); $sth=$dbh->prepare("select * *************** *** 691,695 **** #------------------ ! sub simplemarcfields { # input my ( --- 606,611 ---- #------------------ ! sub extractmarcfields { ! use strict; # input my ( *************** *** 704,707 **** --- 620,629 ---- $field, $value, ); + my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, + $publisher, $publicationyear, $volume, $number, @subjects, $subject, + $size, $pages, $controlnumber, $subtitle, + $notes, $additionalauthors, $illustrator, $copyrightdate, + $s, $subdivision, $subjectsubfield, + $seriestitle); foreach $field (@$record) { if ($field->{'tag'} eq '001') { *************** *** 721,725 **** if ($field->{'tag'} eq '020') { $bib->{isbn}=$field->{'subfields'}->{'a'}; ! ($bib->{isbn}=~/ARRAY/) && ($bib->{isbn}=$$bib->{isbn}[0]); $bib->{isbn}=~s/[^\d]*//g; } --- 643,647 ---- if ($field->{'tag'} eq '020') { $bib->{isbn}=$field->{'subfields'}->{'a'}; ! if (ref($bib->{isbn}) eq 'ARRAY') {$bib->{isbn}=$$bib->{isbn}[0]}; $bib->{isbn}=~s/[^\d]*//g; } *************** *** 738,746 **** $bib->{subtitle}=~s/ \/$//; } } # foreach field return $bib; ! } # sub simplemarcfields sub z3950menu { --- 660,765 ---- $bib->{subtitle}=~s/ \/$//; } + + + if ($field->{'tag'} eq '082') { + $dewey=$field->{'subfields'}->{'a'}; + if (ref($dewey) eq 'ARRAY') { $dewey=$$dewey[0]; } + $dewey=~s/\///g; + } + if ($field->{'tag'} eq '260') { + $place=$field->{'subfields'}->{'a'}; + if (ref($place) eq 'ARRAY') { $place=$$place[0]; } + $place=~s/\s*:$//g; + + $publisher=$field->{'subfields'}->{'b'}; + if (ref($publisher) eq 'ARRAY') { $publisher=$$publisher[0]; } + $publisher=~s/\s*:$//g; + + $publicationyear=$field->{'subfields'}->{'c'}; + if ($publicationyear=~/c(\d\d\d\d)/) { + $copyrightdate=$1; + } + if ($publicationyear=~/[^c](\d\d\d\d)/) { + $publicationyear=$1; + } elsif ($copyrightdate) { + $publicationyear=$copyrightdate; + } else { + $publicationyear=~/(\d\d\d\d)/; + $publicationyear=$1; + } + } + if ($field->{'tag'} eq '300') { + $pages=$field->{'subfields'}->{'a'}; + $pages=~s/ \;$//; + $size=$field->{'subfields'}->{'c'}; + $pages=~s/\s*:$//g; + $size=~s/\s*:$//g; + } + if ($field->{'tag'} eq '362') { + if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) { + $volume=$1; + $number=$2; + } + } + if ($field->{'tag'} eq '440') { + $seriestitle=$field->{'subfields'}->{'a'}; + if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) { + $volume=$1; + $number=$2; + } + } + if ($field->{'tag'} eq '700') { + my $name=$field->{'subfields'}->{'a'}; + if ($field->{'subfields'}->{'e'}!~/ill/) { + $additionalauthors.="$name\n"; + } else { + $illustrator=$name; + } + } + if ($field->{'tag'} =~/^5/) { + $notes.="$field->{'subfields'}->{'a'}\n"; + } + if ($field->{'tag'} =~/65\d/) { + my $sub; + my $subject=$field->{'subfields'}->{'a'}; + $subject=~s/\.$//; + foreach $subjectsubfield ( 'x','y','z' ) { + if ($subdivision=$field->{'subfields'}->{$subjectsubfield}) { + if ( ref($subdivision) eq 'ARRAY' ) { + foreach $s (@$subdivision) { + $s=~s/\.$//; + $subject.=" -- $s"; + } # foreach subdivision + } else { + $subdivision=~s/\.$//; + $subject.=" -- $subdivision"; + } # if array + } # if subfield exists + } # foreach subfield + push @subjects, $subject; + } + + ($dewey ) && ($bib->{dewey}=$dewey ); + ($place ) && ($bib->{place}=$place ); + ($publisher ) && ($bib->{publisher}=$publisher ); + ($publicationyear ) && ($bib->{publicationyear}=$publicationyear ); + ($copyrightdate ) && ($bib->{copyrightdate}=$copyrightdate ); + ($pages ) && ($bib->{pages}=$pages ); + ($size ) && ($bib->{size}=$size ); + ($volume ) && ($bib->{volume}=$volume ); + ($number ) && ($bib->{number}=$number ); + ($seriestitle ) && ($bib->{seriestitle}=$seriestitle ); + ($additionalauthors ) && ($bib->{additionalauthors}=$additionalauthors ); + ($illustrator ) && ($bib->{illustrator}=$illustrator ); + ($notes ) && ($bib->{notes}=$notes ); + ($subject ) && ($bib->{subject}=$subject ); + + } # foreach field return $bib; ! #--------------------------------- ! } # sub extractmarcfields sub z3950menu { *************** *** 806,810 **** if ( ! $title ) { ($record)=parsemarcfileformat($r_marcdata); ! $bib=simplemarcfields($record); if ( $bib->{title} ) { $title=$bib->{title} }; } # if no title yet --- 825,829 ---- if ( ! $title ) { ($record)=parsemarcfileformat($r_marcdata); ! $bib=extractmarcfields($record); if ( $bib->{title} ) { $title=$bib->{title} }; } # if no title yet *************** *** 1589,1590 **** --- 1608,1631 ---- } # sub checkvalidisbn + #------------------------- + sub BuildTagMap { + use strict; + + my (@tagmaplist)=@_; # input + my ($tagmap); #return + + my ( + $row, + $tagnum, $subfield, $fieldname, $repeat, $stripchars, + ); + + foreach $row (@tagmaplist) { + ($tagnum, $subfield, $fieldname, $repeat, $stripchars)= @$row; + #print "tagnum=$tagnum name=$fieldname\n"; + $tagmap->{$tagnum}{$subfield}{fieldname}=$fieldname; + $tagmap->{$tagnum}{$subfield}{repeat}=$repeat; + $tagmap->{$tagnum}{$subfield}{stripchars}=$stripchars; + } # foreach row + return $tagmap; + } # sub BuildTagMap + #------------------------- From amillar at users.sourceforge.net Wed Jun 5 21:20:13 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Wed, 05 Jun 2002 12:20:13 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.11,1.6.2.12 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv4344 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: Fix subject array handling Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.11 retrieving revision 1.6.2.12 diff -C2 -r1.6.2.11 -r1.6.2.12 *** marcimport.pl 5 Jun 2002 17:19:04 -0000 1.6.2.11 --- marcimport.pl 5 Jun 2002 19:20:10 -0000 1.6.2.12 *************** *** 182,185 **** --- 182,187 ---- )=@_; + my $debug=1; + my $sth; print "Main Menu


    \n"; *************** *** 311,315 **** $illustrator =$bib->{illustrator}; $notes =$bib->{notes}; - $subject =$bib->{subject}; $titleinput=$input->textfield(-name=>'title', -default=>$title, -size=>40); --- 313,316 ---- *************** *** 319,328 **** $illustratorinput=$input->textfield(-name=>'illustrator', -default=>$illustrator); $additionalauthorsinput=$input->textarea(-name=>'additionalauthors', -default=>$additionalauthors, -rows=>4, -cols=>20); my $subject=''; ! foreach (@subjects) { $subject.="$_\n"; } ! $subjectinput=$input->textarea(-name=>'subject', -default=>$subject, -rows=>4, -cols=>40); ! $noteinput=$input->textarea(-name=>'notes', -default=>$notes, -rows=>4, -cols=>40, -wrap=>'physical'); $copyrightinput=$input->textfield(-name=>'copyrightdate', -default=>$copyrightdate); $seriestitleinput=$input->textfield(-name=>'seriestitle', -default=>$seriestitle); --- 320,334 ---- $illustratorinput=$input->textfield(-name=>'illustrator', -default=>$illustrator); $additionalauthorsinput=$input->textarea(-name=>'additionalauthors', -default=>$additionalauthors, -rows=>4, -cols=>20); + my $subject=''; ! foreach ( @{$bib->{subject} } ) { $subject.="$_\n"; + print "
    form subject=$subject
    \n" if $debug; } ! $subjectinput=$input->textarea(-name=>'subject', ! -default=>$subject, -rows=>4, -cols=>40); ! ! $noteinput=$input->textarea(-name=>'notes', ! -default=>$notes, -rows=>4, -cols=>40, -wrap=>'physical'); $copyrightinput=$input->textfield(-name=>'copyrightdate', -default=>$copyrightdate); $seriestitleinput=$input->textfield(-name=>'seriestitle', -default=>$seriestitle); *************** *** 616,619 **** --- 622,626 ---- my $bib; # hash of named fields + my $debug=0; my ( *************** *** 626,629 **** --- 633,639 ---- $s, $subdivision, $subjectsubfield, $seriestitle); + + print "
    \n" if $debug;
    + 
          foreach $field (@$record) {
      	    if ($field->{'tag'} eq '001') {
    ***************
    *** 724,727 ****
    --- 734,738 ----
      		    my $subject=$field->{'subfields'}->{'a'};
      		    $subject=~s/\.$//;
    + 		    print "Subject=$subject\n" if $debug;
      		    foreach $subjectsubfield ( 'x','y','z' ) {
      		      if ($subdivision=$field->{'subfields'}->{$subjectsubfield}) {
    ***************
    *** 737,740 ****
    --- 748,752 ----
      		      } # if subfield exists
      		    } # foreach subfield
    + 		    print "Subject=$subject\n" if $debug;
      		    push @subjects, $subject;
      		}
    ***************
    *** 753,760 ****
      		($illustrator		) && ($bib->{illustrator}=$illustrator  );
      		($notes			) && ($bib->{notes}=$notes  );
    ! 		($subject		) && ($bib->{subject}=$subject  );
      
      
          } # foreach field
      
          return $bib;
    --- 765,773 ----
      		($illustrator		) && ($bib->{illustrator}=$illustrator  );
      		($notes			) && ($bib->{notes}=$notes  );
    ! 		($#subjects		) && ($bib->{subject}=\@subjects  );
      
      
          } # foreach field
    +     print "
    \n" if $debug; return $bib; From finlayt at users.sourceforge.net Thu Jun 6 04:47:56 2002 From: finlayt at users.sourceforge.net (Finlay Thompson) Date: Wed, 05 Jun 2002 19:47:56 -0700 Subject: [Koha-cvs] CVS: koha/C4 Reserves2.pm,1.6,1.7 Message-ID: Update of /cvsroot/koha/koha/C4 In directory usw-pr-cvs1:/tmp/cvs-serv14624/C4 Modified Files: Reserves2.pm Log Message: improved all the code so that priorities are reset properly. Index: Reserves2.pm =================================================================== RCS file: /cvsroot/koha/koha/C4/Reserves2.pm,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** Reserves2.pm 29 May 2002 04:39:12 -0000 1.6 --- Reserves2.pm 6 Jun 2002 02:47:53 -0000 1.7 *************** *** 16,20 **** @ISA = qw(Exporter); ! @EXPORT = qw(&FindReserves &CheckReserves &CancelReserve &ReserveWaiting &CreateReserve &updatereserves &getreservetitle &Findgroupreserve); %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], --- 16,20 ---- @ISA = qw(Exporter); ! @EXPORT = qw(&FindReserves &CheckReserves &CheckWaiting &CancelReserve &FillReserve &ReserveWaiting &CreateReserve &updatereserves &getreservetitle &Findgroupreserve); %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], *************** *** 55,60 **** my ($bib,$bor) = @_; my $dbh = C4Connect; ! my $query = "Select *,reserves.branchcode,biblio.title as btitle ! from reserves,borrowers,biblio "; if ($bib ne ''){ $bib = $dbh->quote($bib); --- 55,60 ---- my ($bib,$bor) = @_; my $dbh = C4Connect; ! my $query = "SELECT *,reserves.branchcode,biblio.title AS btitle ! FROM reserves,borrowers,biblio "; if ($bib ne ''){ $bib = $dbh->quote($bib); *************** *** 101,115 **** my $qitem=$dbh->quote($item); # get the biblionumber... ! my $sth=$dbh->prepare("select biblionumber from items where itemnumber=$qitem"); $sth->execute; ! my ($biblio) = $sth->fetchrow_array; $sth->finish; $dbh->disconnect; # get the reserves... ! my ($count, $reserves) = FindReserves($biblio); my $priority = 10000000; my $highest; if ($count) { ! foreach my $res (@$reserves) { if ($res->{'itemnumber'} == $item) { return ("Waiting", $res); --- 101,115 ---- my $qitem=$dbh->quote($item); # get the biblionumber... ! my $sth=$dbh->prepare("select biblionumber, biblioitemnumber from items where itemnumber=$qitem"); $sth->execute; ! my ($biblio, $bibitem) = $sth->fetchrow_array; $sth->finish; $dbh->disconnect; # get the reserves... ! my ($count, @reserves) = Findgroupreserve($bibitem, $biblio); my $priority = 10000000; my $highest; if ($count) { ! foreach my $res (@reserves) { if ($res->{'itemnumber'} == $item) { return ("Waiting", $res); *************** *** 131,134 **** --- 131,135 ---- my ($biblio, $item, $borr) = @_; my $dbh=C4Connect; + warn "In CancelReserve"; if (($item and $borr) and (not $biblio)) { # removing a waiting reserve record.... *************** *** 147,158 **** if (($biblio and $borr) and (not $item)) { # removing a reserve record.... ! $biblio = $dbh->quote($biblio); $borr = $dbh->quote($borr); # fix up the priorities on the other records.... ! my $query = "select priority from reserves ! where biblionumber = $biblio ! and borrowernumber = $borr ! and cancellationdate is NULL ! and (found <> 'F' or found is NULL)"; my $sth=$dbh->prepare($query); $sth->execute; --- 148,159 ---- if (($biblio and $borr) and (not $item)) { # removing a reserve record.... ! my $q_biblio = $dbh->quote($biblio); $borr = $dbh->quote($borr); # fix up the priorities on the other records.... ! my $query = "SELECT priority FROM reserves ! WHERE biblionumber = $q_biblio ! AND borrowernumber = $borr ! AND cancellationdate is NULL ! AND (found <> 'F' or found is NULL)"; my $sth=$dbh->prepare($query); $sth->execute; *************** *** 163,167 **** found = Null, priority = 0 ! where biblionumber = $biblio and borrowernumber = $borr and cancellationdate is NULL --- 164,168 ---- found = Null, priority = 0 ! where biblionumber = $q_biblio and borrowernumber = $borr and cancellationdate is NULL *************** *** 171,188 **** $sth->finish; # now fix the priority on the others.... ! my ($count, $reserves) = FindReserves($biblio); ! foreach my $rec (@$reserves) { ! if ($rec->{'priority'} > $priority) { ! my $newpr = $rec->{'priority'}; ! $newpr = $dbh->quote($newpr - 1); ! my $query = "update reserves set priority = $newpr ! where biblionumber = $rec->{'biblionumber'} ! and borrowernumber = $rec->{'borrowernumber'} ! and cancellationdate is NULL ! and (found <> 'F' or found is NULL)"; ! my $sth = $dbh->prepare($query); ! $sth->execute; ! $sth->finish; ! } } } --- 172,220 ---- $sth->finish; # now fix the priority on the others.... ! fixpriority($priority, $biblio); ! } ! $dbh->disconnect; ! } ! ! ! sub FillReserve { ! my ($res) = @_; ! my $dbh=C4Connect; ! # removing a waiting reserve record.... ! my $biblio = $res->{'biblionumber'}; my $qbiblio = $dbh->quote($biblio); ! my $borr = $res->{'borrowernumber'}; $borr = $dbh->quote($borr); ! my $resdate = $res->{'reservedate'}; $resdate = $dbh->quote($resdate); ! # update the database... ! my $query = "UPDATE reserves SET found = 'F', ! priority = 0 ! WHERE biblionumber = $qbiblio ! AND reservedate = $resdate ! AND borrowernumber = $borr"; ! my $sth = $dbh->prepare($query); ! $sth->execute; ! $sth->finish; ! $dbh->disconnect; ! # now fix the priority on the others.... ! fixpriority($res->{'priority'}, $biblio); ! } ! ! sub fixpriority { ! my ($priority, $biblio) = @_; ! my $dbh = C4Connect; ! my ($count, $reserves) = FindReserves($biblio); ! foreach my $rec (@$reserves) { ! if ($rec->{'priority'} > $priority) { ! my $newpr = $rec->{'priority'}; $newpr = $dbh->quote($newpr - 1); ! my $nbib = $rec->{'biblionumber'}; $nbib = $dbh->quote($nbib); ! my $nbor = $rec->{'borrowernumber'}; $nbor = $dbh->quote($nbor); ! my $nresd = $rec->{'reservedate'}; $nresd = $dbh->quote($nresd); ! my $query = "UPDATE reserves SET priority = $newpr ! WHERE biblionumber = $nbib ! AND borrowernumber = $nbor ! AND reservedate = $nresd"; ! warn $query; ! my $sth = $dbh->prepare($query); ! $sth->execute; ! $sth->finish; } } *************** *** 190,193 **** --- 222,227 ---- } + + sub ReserveWaiting { my ($item, $borr) = @_; *************** *** 210,243 **** $sth->finish; my $biblio = $data->{'biblionumber'}; ! $biblio = $dbh->quote($biblio); # update reserves record.... ! $query = "update reserves set priority = 0, found = 'W', itemnumber = $item ! where borrowernumber = $borr and biblionumber = $biblio"; $sth = $dbh->prepare($query); $sth->execute; $sth->finish; # now fix up the remaining priorities.... ! $query = "select priority, borrowernumber from reserves where biblionumber = $biblio ! and cancellationdate is NULL ! and found is NULL ! and priority <> 0 and priority is not NULL"; ! $sth = $dbh->prepare($query); ! $sth->execute; my $branchcode = $data->{'branchcode'}; ! my $priority = $data->{'priority'}; ! while (my $data = $sth->fetchrow_hashref) { ! if ($data->{'priority'} > $priority) { ! my $uquery = "update reserves set priority = priority - 1 ! where biblionumber = $biblio ! and borrowernumber = $borr ! and cancellation is NULL"; ! my $usth->$dbh->prepare($query); ! $usth->execute; ! $usth->finish; ! } } $sth->finish; ! $dbh->disconnect; ! return $branchcode; } --- 244,279 ---- $sth->finish; my $biblio = $data->{'biblionumber'}; ! my $q_biblio = $dbh->quote($biblio); # update reserves record.... ! $query = "UPDATE reserves SET priority = 0, found = 'W', itemnumber = $item ! WHERE borrowernumber = $borr AND biblionumber = $q_biblio"; $sth = $dbh->prepare($query); $sth->execute; $sth->finish; + $dbh->disconnect; # now fix up the remaining priorities.... ! fixpriority($data->{'priority'}, $biblio); my $branchcode = $data->{'branchcode'}; ! return $branchcode; ! } ! ! sub CheckWaiting { ! my ($borr)=@_; ! my $dbh = C4Connect; ! $borr = $dbh->quote($borr); ! my @itemswaiting; ! my $query = "SELECT * FROM reserves ! WHERE borrowernumber = $borr ! AND reserves.found = 'W' ! AND cancellationdate is NULL"; ! my $sth = $dbh->prepare($query); ! $sth->execute(); ! my $cnt=0; ! if (my $data=$sth->fetchrow_hashref) { ! @itemswaiting[$cnt] =$data; ! $cnt ++; } $sth->finish; ! return ($cnt,\@itemswaiting); } *************** *** 246,261 **** my $dbh=C4Connect; $bibitem=$dbh->quote($bibitem); ! my $query="Select * from reserves ! left join reserveconstraints on ! reserves.biblionumber=reserveconstraints.biblionumber ! where ! reserves.biblionumber=$biblio and ! ((reserveconstraints.biblioitemnumber=$bibitem ! and reserves.borrowernumber=reserveconstraints.borrowernumber ! and reserves.reservedate=reserveconstraints.reservedate) ! or reserves.constrainttype='a') ! and reserves.cancellationdate is NULL ! and (reserves.found <> 'F' or reserves.found is NULL)"; ! # print $query; my $sth=$dbh->prepare($query); $sth->execute; --- 282,305 ---- my $dbh=C4Connect; $bibitem=$dbh->quote($bibitem); ! my $query = "SELECT reserves.biblionumber AS biblionumber, ! reserves.borrowernumber AS borrowernumber, ! reserves.reservedate AS reservedate, ! reserves.branchcode AS branchcode, ! reserves.cancellationdate AS cancellationdate, ! reserves.found AS found, ! reserves.reservenotes AS reservenotes, ! reserves.priority AS priority, ! reserves.timestamp AS timestamp, ! reserveconstraints.biblioitemnumber AS biblioitemnumber, ! reserves.itemnumber AS itemnumber ! FROM reserves LEFT JOIN reserveconstraints ! ON reserves.biblionumber = reserveconstraints.biblionumber ! WHERE reserves.biblionumber = $biblio ! AND ( ( reserveconstraints.biblioitemnumber = $bibitem ! AND reserves.borrowernumber = reserveconstraints.borrowernumber ! AND reserves.reservedate =reserveconstraints.reservedate ) ! OR reserves.constrainttype='a' ) ! AND reserves.cancellationdate is NULL ! AND (reserves.found <> 'F' or reserves.found is NULL)"; my $sth=$dbh->prepare($query); $sth->execute; From finlayt at users.sourceforge.net Thu Jun 6 04:48:55 2002 From: finlayt at users.sourceforge.net (Finlay Thompson) Date: Wed, 05 Jun 2002 19:48:55 -0700 Subject: [Koha-cvs] CVS: koha/C4/Circulation Circ2.pm,1.26,1.27 Message-ID: Update of /cvsroot/koha/koha/C4/Circulation In directory usw-pr-cvs1:/tmp/cvs-serv14805/C4/Circulation Modified Files: Circ2.pm Log Message: Changed the issuebook routine to use the new methods from C4::Reserves2.pm Index: Circ2.pm =================================================================== RCS file: /cvsroot/koha/koha/C4/Circulation/Circ2.pm,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** Circ2.pm 29 May 2002 05:52:12 -0000 1.26 --- Circ2.pm 6 Jun 2002 02:48:53 -0000 1.27 *************** *** 290,296 **** my ($env, $patroninformation, $barcode, $responses, $date) = @_; my $dbh=&C4Connect; ! my $iteminformation=getiteminformation($env, 0, $barcode); my ($datedue); my ($rejected,$question,$defaultanswer,$questionnumber, $noissue); SWITCH: { if ($patroninformation->{'gonenoaddress'}) { --- 290,297 ---- my ($env, $patroninformation, $barcode, $responses, $date) = @_; my $dbh=&C4Connect; ! my $iteminformation = getiteminformation($env, 0, $barcode); my ($datedue); my ($rejected,$question,$defaultanswer,$questionnumber, $noissue); + my $message; SWITCH: { if ($patroninformation->{'gonenoaddress'}) { *************** *** 307,320 **** } my $amount = checkaccount($env,$patroninformation->{'borrowernumber'}, $dbh,$date); ! if ($amount>5 && $patroninformation->{'categorycode'} ne 'L' && $patroninformation->{'categorycode'} ne 'W' && $patroninformation->{'categorycode'} ne 'I' && $patroninformation->{'categorycode'} ne 'B' && $patroninformation->{'categorycode'} ne 'P') { ! $rejected=sprintf "Patron owes \$%.02f.", $amount; last SWITCH; } unless ($iteminformation) { ! $rejected="$barcode is not a valid barcode."; last SWITCH; } --- 308,321 ---- } my $amount = checkaccount($env,$patroninformation->{'borrowernumber'}, $dbh,$date); ! if ($amount > 5 && $patroninformation->{'categorycode'} ne 'L' && $patroninformation->{'categorycode'} ne 'W' && $patroninformation->{'categorycode'} ne 'I' && $patroninformation->{'categorycode'} ne 'B' && $patroninformation->{'categorycode'} ne 'P') { ! $rejected = sprintf "Patron owes \$%.02f.", $amount; last SWITCH; } unless ($iteminformation) { ! $rejected = "$barcode is not a valid barcode."; last SWITCH; } *************** *** 344,350 **** } else { if ($responses->{4} eq '') { ! $questionnumber=4; ! $question="Book is issued to this borrower.\nRenew?"; ! $defaultanswer='Y'; last SWITCH; } elsif ($responses->{4} eq 'Y') { --- 345,351 ---- } else { if ($responses->{4} eq '') { ! $questionnumber = 4; ! $question = "Book is issued to this borrower.\nRenew?"; ! $defaultanswer = 'Y'; last SWITCH; } elsif ($responses->{4} eq 'Y') { *************** *** 352,356 **** if ($charge > 0) { createcharge($env, $dbh, $iteminformation->{'itemnumber'}, $patroninformation->{'borrowernumber'}, $charge); ! $iteminformation->{'charge'}=$charge; } &UpdateStats($env,$env->{'branchcode'},'renew',$charge,'',$iteminformation->{'itemnumber'},$iteminformation->{'itemtype'}); --- 353,357 ---- if ($charge > 0) { createcharge($env, $dbh, $iteminformation->{'itemnumber'}, $patroninformation->{'borrowernumber'}, $charge); ! $iteminformation->{'charge'} = $charge; } &UpdateStats($env,$env->{'branchcode'},'renew',$charge,'',$iteminformation->{'itemnumber'},$iteminformation->{'itemtype'}); *************** *** 377,409 **** } ! my ($resbor, $resrec) = checkreserve($env, $dbh, $iteminformation->{'itemnumber'}); ! ! if ($resbor eq $patroninformation->{'borrowernumber'}) { ! my $rquery = "update reserves set found = 'F' where reservedate = '$resrec->{'reservedate'}' and borrowernumber = '$resrec->{'borrowernumber'}' and biblionumber = '$resrec->{'biblionumber'}'"; ! my $rsth = $dbh->prepare($rquery); ! $rsth->execute; ! $rsth->finish; ! } elsif ($resbor ne "") { ! my ($resborrower, $flags)=getpatroninformation($env, $resbor,0); ! if ($responses->{2} eq '') { ! $questionnumber=2; ! $question="Reserved for $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'}) since $resrec->{'reservedate'}\nAllow issue?"; ! $defaultanswer='N'; ! last SWITCH; ! } elsif ($responses->{2} eq 'N') { ! #printreserve($env, $resrec, $resborrower, $iteminformation); ! $rejected=-1; ! last SWITCH; ! } else { ! if ($responses->{3} eq '') { ! $questionnumber=3; ! $question="Cancel reserve for $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'})?"; $defaultanswer='N'; last SWITCH; ! } elsif ($responses->{3} eq 'Y') { ! my $rquery = "update reserves set found = 'F' where reservedate = '$resrec->{'reservedate'}' and borrowernumber = '$resrec->{'borrowernumber'}' and biblionumber = '$resrec->{'biblionumber'}'"; ! my $rsth = $dbh->prepare($rquery); ! $rsth->execute; ! $rsth->finish; } } --- 378,438 ---- } ! my ($restype, $res) = CheckReserves($iteminformation->{'itemnumber'}); ! if ($restype) { ! my $resbor = $res->{'borrowernumber'}; ! if ($resbor eq $patroninformation->{'borrowernumber'}) { ! FillReserve($res); ! } elsif ($restype eq "Waiting") { ! my ($resborrower, $flags)=getpatroninformation($env, $resbor,0); ! my $branches = getbranches(); ! my $branchname = $branches->{$res->{'branchcode'}}->{'branchname'}; ! if ($responses->{2} eq '') { ! $questionnumber=2; ! $question="Waiting for $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'}) at $branchname \nAllow issue?"; ! $defaultanswer='N'; ! last SWITCH; ! } elsif ($responses->{2} eq 'N') { ! $rejected=-1; ! last SWITCH; ! } else { ! if ($responses->{3} eq '') { ! $questionnumber=3; ! $question="Cancel reserve for $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'})?"; ! $defaultanswer='N'; ! last SWITCH; ! } elsif ($responses->{3} eq 'Y') { ! CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'}); ! } ! } ! } elsif ($restype eq "Reserved") { ! my ($resborrower, $flags)=getpatroninformation($env, $resbor,0); ! my $branches = getbranches(); ! my $branchname = $branches->{$res->{'branchcode'}}->{'branchname'}; ! if ($responses->{5} eq '') { ! $questionnumber=5; ! $question="Reserved for $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'}) since $res->{'reservedate'} \nAllow issue?"; $defaultanswer='N'; last SWITCH; ! } elsif ($responses->{5} eq 'N') { ! if ($responses->{6} eq '') { ! $questionnumber=6; ! $question="Set reserve for $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'}) to waiting and transfer to $branchname?"; ! $defaultanswer='N'; ! } elsif ($responses->{6} eq 'Y') { ! my $tobrcd = ReserveWaiting($res->{'itemnumber'}, $res->{'borrowernumber'}); ! transferbook($tobrcd, $barcode, 1); ! $message = "Item should now be waiting at $branchname"; ! } ! $rejected=-1; ! last SWITCH; ! } else { ! if ($responses->{7} eq '') { ! $questionnumber=7; ! $question="Cancel reserve for $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'})?"; ! $defaultanswer='N'; ! last SWITCH; ! } elsif ($responses->{7} eq 'Y') { ! CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'}); ! } } } *************** *** 438,442 **** &UpdateStats($env,$env->{'branchcode'},'issue',$charge,'',$iteminformation->{'itemnumber'},$iteminformation->{'itemtype'}); } - my $message=''; if ($iteminformation->{'charge'}) { $message=sprintf "Rental charge of \$%.02f applies.", $iteminformation->{'charge'}; --- 467,470 ---- *************** *** 680,684 **** $flags{'NOTES'} = \%flaginfo; } ! my ($odues, $itemsoverdue) = checkoverdues($env, $patroninformation->{'borrowernumber'}, $dbh); if ($odues > 0) { my %flaginfo; --- 708,713 ---- $flags{'NOTES'} = \%flaginfo; } ! my ($odues, $itemsoverdue) ! = checkoverdues($env, $patroninformation->{'borrowernumber'}, $dbh); if ($odues > 0) { my %flaginfo; *************** *** 690,699 **** $flags{'ODUES'} = \%flaginfo; } ! my ($nowaiting, $itemswaiting) = checkwaiting($env, $dbh, $patroninformation->{'borrowernumber'}); if ($nowaiting > 0) { my %flaginfo; $flaginfo{'message'} = "Reserved items available"; $flaginfo{'itemlist'} = $itemswaiting; - $flaginfo{'itemfields'} = ['barcode', 'title', 'author', 'dewey', 'subclass', 'holdingbranch']; $flags{'WAITING'} = \%flaginfo; } --- 719,728 ---- $flags{'ODUES'} = \%flaginfo; } ! my ($nowaiting, $itemswaiting) ! = CheckWaiting($patroninformation->{'borrowernumber'}); if ($nowaiting > 0) { my %flaginfo; $flaginfo{'message'} = "Reserved items available"; $flaginfo{'itemlist'} = $itemswaiting; $flags{'WAITING'} = \%flaginfo; } *************** *** 705,715 **** # From Main.pm, modified to return a list of overdueitems, in addition to a count #checks whether a borrower has overdue items ! my ($env,$bornum,$dbh)=@_; my @datearr = localtime; my $today = ($datearr[5] + 1900)."-".($datearr[4]+1)."-".$datearr[3]; my @overdueitems; ! my $count=0; ! my $query = "Select * from issues,biblio,biblioitems,items where items.biblioitemnumber=biblioitems.biblioitemnumber and items.biblionumber=biblio.biblionumber and issues.itemnumber=items.itemnumber and borrowernumber=$bornum and returndate is NULL and date_due < '$today'"; ! my $sth=$dbh->prepare($query); $sth->execute; while (my $data = $sth->fetchrow_hashref) { --- 734,750 ---- # From Main.pm, modified to return a list of overdueitems, in addition to a count #checks whether a borrower has overdue items ! my ($env, $bornum, $dbh)=@_; my @datearr = localtime; my $today = ($datearr[5] + 1900)."-".($datearr[4]+1)."-".$datearr[3]; my @overdueitems; ! my $count = 0; ! my $query = "SELECT * FROM issues,biblio,biblioitems,items ! WHERE items.biblioitemnumber = biblioitems.biblioitemnumber ! AND items.biblionumber = biblio.biblionumber ! AND issues.itemnumber = items.itemnumber ! AND issues.borrowernumber = $bornum ! AND issues.returndate is NULL ! AND issues.date_due < '$today'"; ! my $sth = $dbh->prepare($query); $sth->execute; while (my $data = $sth->fetchrow_hashref) { From finlayt at users.sourceforge.net Thu Jun 6 04:51:40 2002 From: finlayt at users.sourceforge.net (Finlay Thompson) Date: Wed, 05 Jun 2002 19:51:40 -0700 Subject: [Koha-cvs] CVS: koha/circ branchtransfers.pl,1.8,1.9 circulation.pl,1.26,1.27 returns.pl,1.4,1.5 Message-ID: Update of /cvsroot/koha/koha/circ In directory usw-pr-cvs1:/tmp/cvs-serv15406/circ Modified Files: branchtransfers.pl circulation.pl returns.pl Log Message: fixed minor bugs Index: branchtransfers.pl =================================================================== RCS file: /cvsroot/koha/koha/circ/branchtransfers.pl,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** branchtransfers.pl 29 May 2002 04:33:42 -0000 1.8 --- branchtransfers.pl 6 Jun 2002 02:51:38 -0000 1.9 *************** *** 285,306 **** print <<"EOF"; !

    ! ! - -
    Circulation: Transfers
    Branch: $branches->{$branch}->{'branchname'}   Printer: $printers->{$printer}->{'printername'}
    Change Settings -
    - - - Next Borrower || - Returns || - Transfers

    -

    !

    EOF --- 285,301 ---- print <<"EOF"; !
    ! Next Borrower   ! ! Returns !
    ! ! Circulation: Transfers
    Branch: $branches->{$branch}->{'branchname'}   Printer: $printers->{$printer}->{'printername'}
    Change Settings !

    EOF Index: circulation.pl =================================================================== RCS file: /cvsroot/koha/koha/circ/circulation.pl,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** circulation.pl 18 May 2002 05:37:26 -0000 1.26 --- circulation.pl 6 Jun 2002 02:51:38 -0000 1.27 *************** *** 45,49 **** my @datearr = localtime(time()); my $todaysdate = (1900+$datearr[5]).sprintf ("%0.2d", ($datearr[4]+1)).sprintf ("%0.2d", $datearr[3]); ! --- 45,49 ---- my @datearr = localtime(time()); my $todaysdate = (1900+$datearr[5]).sprintf ("%0.2d", ($datearr[4]+1)).sprintf ("%0.2d", $datearr[3]); ! warn $todaysdate; *************** *** 119,124 **** $rejectedtext = << "EOF"; ! !
    Error Issuing Book
    $rejected

    --- 119,124 ---- $rejectedtext = << "EOF"; ! !
    Error Issuing Book
    $rejected

    *************** *** 130,134 **** if ($borrowerslist) { $selectborrower = <<"EOF"; !

    --- 130,134 ---- if ($borrowerslist) { $selectborrower = <<"EOF"; ! *************** *** 153,171 **** # title.... my $title = <<"EOF"; !

    ! ! -
    Circulation: Issues
    Branch: $branches->{$branch}->{'branchname'}   Printer: $printers->{$printer}->{'printername'}
    Change Settings
    - - Next Borrower || - Returns || - Transfers

    -

    !

    EOF --- 153,172 ---- # title.... my $title = <<"EOF"; !
    ! ! Next Borrower   ! ! Returns !   ! Transfers ! !
    ! Circulation: Issues
    Branch: $branches->{$branch}->{'branchname'}   Printer: $printers->{$printer}->{'printername'}
    Change Settings !

    EOF *************** *** 173,177 **** my $cardnumberinput = << "EOF"; !
    --- 174,178 ---- my $cardnumberinput = << "EOF"; !
    *************** *** 179,184 ****
    - - EOF --- 180,183 ---- *************** *** 277,281 **** my $barcodeentrytext = <<"EOF"; !
    --- 276,280 ---- my $barcodeentrytext = <<"EOF"; !
    *************** *** 433,437 **** print $flaginfotable; print $barcodeentrytext; ! print "

    "; print $issuedbookstable; } --- 432,436 ---- print $flaginfotable; print $barcodeentrytext; ! print "



    "; print $issuedbookstable; } Index: returns.pl =================================================================== RCS file: /cvsroot/koha/koha/circ/returns.pl,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** returns.pl 30 May 2002 01:32:29 -0000 1.4 --- returns.pl 6 Jun 2002 02:51:38 -0000 1.5 *************** *** 86,89 **** --- 86,90 ---- my $biblio = $query->param('biblionumber'); my $borrnum = $query->param('borrowernumber'); + warn "In Kill Reserved"; CancelReserve($biblio, 0, $borrnum); $messagetext .= "Reserve Cancelled
    "; From finlayt at users.sourceforge.net Thu Jun 6 06:15:21 2002 From: finlayt at users.sourceforge.net (Finlay Thompson) Date: Wed, 05 Jun 2002 21:15:21 -0700 Subject: [Koha-cvs] CVS: koha/C4 Search.pm,1.28,1.29 Message-ID: Update of /cvsroot/koha/koha/C4 In directory usw-pr-cvs1:/tmp/cvs-serv30020/C4 Modified Files: Search.pm Log Message: fixed bug http://bugzilla.katipo.co.nz/show_bug.cgi?id=1284 If an item doesnt have a holdingbranch it just shows blank instead of not appearing at all. Index: Search.pm =================================================================== RCS file: /cvsroot/koha/koha/C4/Search.pm,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** Search.pm 21 May 2002 01:17:44 -0000 1.28 --- Search.pm 6 Jun 2002 04:15:18 -0000 1.29 *************** *** 640,649 **** my ($env,$biblionumber,$type) = @_; my $dbh = &C4Connect; ! my $query = "Select * from items, biblio, biblioitems, branches ! where (items.biblioitemnumber = biblioitems.biblioitemnumber) ! and biblioitems.biblionumber = biblio.biblionumber ! and biblio.biblionumber = '$biblionumber' ! and branches.branchcode = items.holdingbranch"; ! if ($type ne 'intra'){ $query .= " and ((items.itemlost<>1 and items.itemlost <> 2) --- 640,647 ---- my ($env,$biblionumber,$type) = @_; my $dbh = &C4Connect; ! my $query = "SELECT * FROM items, biblio, biblioitems ! WHERE items.biblionumber = '$biblionumber' ! AND biblioitems.biblioitemnumber = items.biblioitemnumber ! AND biblio.biblionumber = items.biblionumber"; if ($type ne 'intra'){ $query .= " and ((items.itemlost<>1 and items.itemlost <> 2) *************** *** 652,655 **** --- 650,654 ---- } $query .= " order by items.dateaccessioned desc"; + warn $query; my $sth=$dbh->prepare($query); $sth->execute; *************** *** 676,686 **** if ($datedue eq ''){ $datedue="Available"; ! my ($rescount,$reserves)=Findgroupreserve($data->{'biblioitemnumber'},$biblionumber); ! ! if ($rescount >0){ ! $datedue='Request'; } } $isth->finish; my $class = $data->{'classification'}; my $dewey = $data->{'dewey'}; --- 675,693 ---- if ($datedue eq ''){ $datedue="Available"; ! my ($restype,$reserves)=CheckReserves($data->{'itemnumber'}); ! if ($restype){ ! $datedue=$restype; } } $isth->finish; + #get branch information..... + my $bquery = "SELECT * FROM branches + WHERE branchcode = '$data->{'holdingbranch'}'"; + my $bsth=$dbh->prepare($bquery); + $bsth->execute; + if (my $bdata=$bsth->fetchrow_hashref){ + $data->{'branchname'} = $bdata->{'branchname'}; + } + my $class = $data->{'classification'}; my $dewey = $data->{'dewey'}; From amillar at users.sourceforge.net Thu Jun 6 09:32:23 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Thu, 06 Jun 2002 00:32:23 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.12,1.6.2.13 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv10607 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: All MARC file format decoding isolated to single subroutine. Entire script now works correctly with "use strict". Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.12 retrieving revision 1.6.2.13 diff -C2 -r1.6.2.12 -r1.6.2.13 *** marcimport.pl 5 Jun 2002 19:20:10 -0000 1.6.2.12 --- marcimport.pl 6 Jun 2002 07:32:20 -0000 1.6.2.13 *************** *** 8,12 **** # Licensed under the GPL ! #use strict; # standard or CPAN modules used --- 8,12 ---- # Licensed under the GPL ! use strict; # standard or CPAN modules used *************** *** 134,138 **** if ($input->param('z3950queue')) { ! PostToZ3950Queue($dbh,$input); } --- 134,138 ---- if ($input->param('z3950queue')) { ! AcceptZ3950Queue($dbh,$input); } *************** *** 143,147 **** if ($input->param('insertnewrecord')) { # Add biblio item, and set up menu for adding item copies ! ($biblionumber,$biblioitemnumber)=AcceptBiblioitem($dbh,$input); ItemCopyForm($dbh,$input,$biblionumber,$biblioitemnumber); print endmenu(); --- 143,147 ---- if ($input->param('insertnewrecord')) { # Add biblio item, and set up menu for adding item copies ! my ($biblionumber,$biblioitemnumber)=AcceptBiblioitem($dbh,$input); ItemCopyForm($dbh,$input,$biblionumber,$biblioitemnumber); print endmenu(); *************** *** 176,180 **** --- 176,182 ---- sub ProcessFile { # A MARC file has been specified; process it for review form + use strict; + # Input params my ( $dbh, *************** *** 182,188 **** )=@_; ! my $debug=1; - my $sth; print "Main Menu


    \n"; my $qisbn=$input->param('isbn'); --- 184,196 ---- )=@_; ! # local vars ! my ( ! $sth, ! $record, ! ); ! ! my $debug=0; ! my $splitchar=chr(29); print "Main Menu
    \n"; my $qisbn=$input->param('isbn'); *************** *** 197,200 **** --- 205,209 ---- #my $data=; my $data; + if ($file=~/Z-(\d+)/) { my $id=$1; *************** *** 209,295 **** } - $splitchar=chr(29); my @records; ! foreach $record (split(/$splitchar/, $data)) { ! my $marctext="
    \n"; ! $marctext.="\n"; ! $leader=substr($record,0,24); ! $marctext.="\n"; ! $record=substr($record,24); ! $splitchar2=chr(30); ! my $directory=0; ! my $tagcounter=0; ! my %tag; ! my @record; ! foreach $field (split(/$splitchar2/, $record)) { ! my %field; ! ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1); ! unless ($directory) { ! $directory=$field; ! my $itemcounter=1; ! $counter=0; ! while ($item=substr($directory,0,12)) { ! $tag=substr($directory,0,3); ! $length=substr($directory,3,4); ! $start=substr($directory,7,6); ! $directory=substr($directory,12); ! $tag{$counter}=$tag; ! $counter++; ! } ! $directory=1; ! next; ! } ! $tag=$tag{$tagcounter}; ! $tagcounter++; ! $field{'tag'}=$tag; ! $marctext.=""; ! $splitchar3=chr(31); ! my @subfields=split(/$splitchar3/, $field); ! $indicator=$subfields[0]; ! $field{'indicator'}=$indicator; ! my $firstline=1; ! if ($#subfields==0) { ! $marctext.=""; ! } else { ! my %subfields; ! $marctext.="\n"; ! $field{'subfields'}=\%subfields; ! } ! push (@record, \%field); ! } ! $marctext.="
    MARC RECORD
    Leader:$leader
    $tagtext{$tag}$tag$indicator
    \n"; ! my $color2=$color; ! for ($i=1; $i<=$#subfields; $i++) { ! ($color2 eq $lc1) ? ($color2=$lc2) : ($color2=$lc1); ! my $text=$subfields[$i]; ! my $subfieldcode=substr($text,0,1); ! my $subfield=substr($text,1); ! $marctext.="\n"; ! if ($subfields{$subfieldcode}) { ! my $subfieldlist=$subfields{$subfieldcode}; ! my @subfieldlist=@$subfieldlist; ! if ($#subfieldlist>=0) { ! push (@subfieldlist, $subfield); ! } else { ! @subfieldlist=($subfields{$subfieldcode}, $subfield); ! } ! $subfields{$subfieldcode}=\@subfieldlist; ! } else { ! $subfields{$subfieldcode}=$subfield; ! } ! } ! $marctext.="
    $subfieldcode
    $subfield
    \n"; ! $marctext{\@record}=$marctext; ! $marc{\@record}=$record; ! push (@records, \@record); ! $counter++; ! } RECORD: ! foreach $record (@records) { ! my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, $publisher, $publicationyear, $volume, $number, @subjects, $notes, $additionalauthors, $illustrator, $copyrightdate, $seriestitle); ! my $marctext=$marctext{$record}; ! my $marc=$marc{$record}; ! $bib=extractmarcfields($record); $controlnumber =$bib->{controlnumber}; --- 218,272 ---- } my @records; ! RECORD: ! foreach $record (split(/$splitchar/, $data)) { ! ! my ( ! $bib, # hash ref to named fields ! $fieldlist, # list ref ! $lccn, $isbn, $issn, $dewey, $author, ! $place, $publisher, $publicationyear, $volume, ! $number, @subjects, $notes, $additionalauthors, ! $copyrightdate, $seriestitle, ! $origisbn, $origissn, $origlccn, $origcontrolnumber, ! $subtitle, ! $controlnumber, ! $cleanauthor, ! $subject, ! $volumedate, ! $volumeddesc, ! $itemtypeselect, ! ); ! my ($lccninput, $isbninput, $issninput, $deweyinput, $authorinput, $titleinput, ! $placeinput, $publisherinput, $publicationyearinput, $volumeinput, ! $numberinput, $notesinput, $additionalauthorsinput, ! $illustratorinput, $copyrightdateinput, $seriestitleinput, ! $subtitleinput, ! $copyrightinput, ! $volumedateinput, ! $volumeddescinput, ! $subjectinput, ! $noteinput, ! $subclassinput, ! $pubyearinput, ! $pagesinput, ! $sizeinput, ! $marcinput, ! $fileinput, ! ); ! ! ! my $marctext; ! ! my $marc=$record; ! ! ($fieldlist)=parsemarcfileformat($record ); ! ! $bib=extractmarcfields($fieldlist ); ! print "Title=$bib->{title}\n" if $debug; ! ! $marctext=FormatMarcText($fieldlist); $controlnumber =$bib->{controlnumber}; *************** *** 298,322 **** $issn =$bib->{issn}; $author =$bib->{author}; - $title =$bib->{title}; - $subtitle =$bib->{subtitle}; - $dewey =$bib->{dewey}; $place =$bib->{place}; $publisher =$bib->{publisher}; $publicationyear =$bib->{publicationyear}; $copyrightdate =$bib->{copyrightdate}; ! $pages =$bib->{pages}; ! $size =$bib->{size}; $volume =$bib->{volume}; $number =$bib->{number}; $seriestitle =$bib->{seriestitle}; $additionalauthors =$bib->{additionalauthors}; - $illustrator =$bib->{illustrator}; $notes =$bib->{notes}; ! $titleinput=$input->textfield(-name=>'title', -default=>$title, -size=>40); $marcinput=$input->hidden(-name=>'marc', -default=>$marc); ! $subtitleinput=$input->textfield(-name=>'subtitle', -default=>$subtitle, -size=>40); $authorinput=$input->textfield(-name=>'author', -default=>$author); ! $illustratorinput=$input->textfield(-name=>'illustrator', -default=>$illustrator); $additionalauthorsinput=$input->textarea(-name=>'additionalauthors', -default=>$additionalauthors, -rows=>4, -cols=>20); --- 275,295 ---- $issn =$bib->{issn}; $author =$bib->{author}; $place =$bib->{place}; $publisher =$bib->{publisher}; $publicationyear =$bib->{publicationyear}; $copyrightdate =$bib->{copyrightdate}; ! $volume =$bib->{volume}; $number =$bib->{number}; $seriestitle =$bib->{seriestitle}; $additionalauthors =$bib->{additionalauthors}; $notes =$bib->{notes}; ! $titleinput=$input->textfield(-name=>'title', -default=>$bib->{title}, -size=>40); $marcinput=$input->hidden(-name=>'marc', -default=>$marc); ! $subtitleinput=$input->textfield(-name=>'subtitle', -default=>$bib->{subtitle}, -size=>40); $authorinput=$input->textfield(-name=>'author', -default=>$author); ! $illustratorinput=$input->textfield(-name=>'illustrator', ! -default=>$bib->{illustrator}); $additionalauthorsinput=$input->textarea(-name=>'additionalauthors', -default=>$additionalauthors, -rows=>4, -cols=>20); *************** *** 341,345 **** $lccninput=$input->textfield(-name=>'lccn', -default=>$lccn); $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn); ! $deweyinput=$input->textfield(-name=>'dewey', -default=>$dewey); $cleanauthor=$author; $cleanauthor=~s/[^A-Za-z]//g; --- 314,318 ---- $lccninput=$input->textfield(-name=>'lccn', -default=>$lccn); $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn); ! $deweyinput=$input->textfield(-name=>'dewey', -default=>$bib->{dewey}); $cleanauthor=$author; $cleanauthor=~s/[^A-Za-z]//g; *************** *** 348,353 **** $pubyearinput=$input->textfield(-name=>'publicationyear', -default=>$publicationyear); $placeinput=$input->textfield(-name=>'place', -default=>$place); ! $pagesinput=$input->textfield(-name=>'pages', -default=>$pages); ! $sizeinput=$input->textfield(-name=>'size', -default=>$size); $fileinput=$input->hidden(-name=>'file', -default=>$file); $origisbn=$input->hidden(-name=>'origisbn', -default=>$isbn); --- 321,326 ---- $pubyearinput=$input->textfield(-name=>'publicationyear', -default=>$publicationyear); $placeinput=$input->textfield(-name=>'place', -default=>$place); ! $pagesinput=$input->textfield(-name=>'pages', -default=>$bib->{pages}); ! $sizeinput=$input->textfield(-name=>'size', -default=>$bib->{size}); $fileinput=$input->hidden(-name=>'file', -default=>$file); $origisbn=$input->hidden(-name=>'origisbn', -default=>$isbn); *************** *** 422,426 **** sub ListSearchResults { ! #use strict; # Input parameters --- 395,399 ---- sub ListSearchResults { ! use strict; # Input parameters *************** *** 439,442 **** --- 412,416 ---- my $recordsource; my $record; + my ($numrecords,$resultsid,$data,$startdate,$enddate); # File can be results of z3950 search or uploaded MARC data *************** *** 571,578 **** sub PrintResultRecordLink { my ($record,$resultsid)=@_; # input ! my $bib; # hash ref to named fields ! my $searchfield, $searchvalue; --- 545,558 ---- sub PrintResultRecordLink { + use strict; my ($record,$resultsid)=@_; # input ! my ( ! $sth, ! $bib, # hash ref to named fields ! $searchfield, $searchvalue, ! $donetext, ! $fieldname, ! ); *************** *** 604,611 **** "&searchfield=$searchfield" . "&searchvalue=$searchvalue" . ! ">$bib->{title} by $bib->{author}" . " $donetext
    \n"; } else { ! print "Error: Problem with $title by $bib->{author}
    \n"; } # if searchfield } # sub PrintResultRecordLink --- 584,591 ---- "&searchfield=$searchfield" . "&searchvalue=$searchvalue" . ! ">$bib->{title} $bib->{author}" . " $donetext
    \n"; } else { ! print "Error: Problem with $bib->{title} $bib->{author}
    \n"; } # if searchfield } # sub PrintResultRecordLink *************** *** 616,624 **** # input my ( ! $record, # list ref )=@_; # return ! my $bib; # hash of named fields my $debug=0; --- 596,606 ---- # input my ( ! $record, # pointer to list of MARC field hashes. ! # Example: $record->[0]->{'tag'} = '100' # Author ! # $record->[0]->{'subfields'}->{'a'} = subfieldvalue )=@_; # return ! my $bib; # pointer to hash of named output fields my $debug=0; *************** *** 636,640 **** print "
    \n" if $debug;
      
    !     foreach $field (@$record) {
      	    if ($field->{'tag'} eq '001') {
      		$bib->{controlnumber}=$field->{'indicator'};
    --- 618,623 ----
          print "
    \n" if $debug;
      
    !     if ( ref($record) eq "ARRAY" ) {
    !         foreach $field (@$record) {
      	    if ($field->{'tag'} eq '001') {
      		$bib->{controlnumber}=$field->{'indicator'};
    ***************
    *** 768,772 ****
      
      
    !     } # foreach field
          print "
    \n" if $debug; --- 751,759 ---- ! } # foreach field ! } else { ! print "Error: extractmarcfields: input ref $record is " . ! ref($record) . " not ARRAY. Contact sysadmin.\n"; ! } print "
    \n" if $debug; *************** *** 835,840 **** $realenddate=$r_enddate; } ! # Snag any title from the results ! if ( ! $title ) { ($record)=parsemarcfileformat($r_marcdata); $bib=extractmarcfields($record); --- 822,827 ---- $realenddate=$r_enddate; } ! # Snag any title from the results if there were any ! if ( ! $title && $r_marcdata ) { ($record)=parsemarcfileformat($r_marcdata); $bib=extractmarcfields($record); *************** *** 916,923 ****
    EOF ! print "
    \n"; ! } # sub z3950 sub uploadmarc { print "Main Menu


    \n"; my $sth=$dbh->prepare("select id,name from uploadedmarc"); --- 903,911 ---- EOF ! print "\n"; ! } # sub z3950menu sub uploadmarc { + use strict; print "Main Menu
    \n"; my $sth=$dbh->prepare("select id,name from uploadedmarc"); *************** *** 960,1002 **** EOF ! } ! ! sub skip { ! ! #opendir(D, "/home/$userid/"); ! #my @dirlist=readdir D; ! #foreach $file (@dirlist) { ! # (next) if ($file=~/^\./); ! # (next) if ($file=~/^nsmail$/); ! # (next) if ($file=~/^public_html$/); ! # ($file=~/\.mrc/) || ($filelist.="$file
    \n"); ! # (next) unless ($file=~/\.mrc$/); ! # $file=~s/ /\%20/g; ! # print "$file
    \n"; ! # } ! - #
    - - } sub parsemarcfileformat { ! #use strict; my $data=shift; my $splitchar=chr(29); my $splitchar2=chr(30); my $splitchar3=chr(31); ! my $debug=1; ! my @records; my $record; foreach $record (split(/$splitchar/, $data)) { ! my $leader=substr($record,0,24); ! #print "Leader:$leader\n"; ! $record=substr($record,24); my $directory=0; my $tagcounter=0; my %tag; - my @record; my $field; foreach $field (split(/$splitchar2/, $record)) { my %field; --- 948,984 ---- EOF ! } # sub mainmenu + #-------------------------- + # Parse MARC data in file format with control-character separators + # May be multiple records. sub parsemarcfileformat { ! use strict; ! # Input is one big text string my $data=shift; + # Output is list of records. Each record is list of field hashes + my @records; + my $splitchar=chr(29); my $splitchar2=chr(30); my $splitchar3=chr(31); ! my $debug=0; my $record; foreach $record (split(/$splitchar/, $data)) { ! my @record; my $directory=0; my $tagcounter=0; my %tag; my $field; + + my $leader=substr($record,0,24); + print "Leader:$leader\n" if $debug; + push (@record, { + 'tag' => 'Leader', + 'indicator' => $leader , + } ); + + $record=substr($record,24); foreach $field (split(/$splitchar2/, $record)) { my %field; *************** *** 1030,1033 **** --- 1012,1016 ---- unless ($#subfields==0) { my %subfields; + my @subfieldlist; my $i; for ($i=1; $i<=$#subfields; $i++) { *************** *** 1035,1050 **** my $subfieldcode=substr($text,0,1); my $subfield=substr($text,1); if ($subfields{$subfieldcode}) { my $subfieldlist=$subfields{$subfieldcode}; ! my @subfieldlist=@$subfieldlist; ! if ($#subfieldlist>=0) { ! # print "$tag Adding to array $subfieldcode -- $subfield
    \n"; push (@subfieldlist, $subfield); } else { ! # print "$tag Arraying $subfieldcode -- $subfield
    \n"; @subfieldlist=($subfields{$subfieldcode}, $subfield); } $subfields{$subfieldcode}=\@subfieldlist; } else { $subfields{$subfieldcode}=$subfield; } --- 1018,1038 ---- my $subfieldcode=substr($text,0,1); my $subfield=substr($text,1); + # if this subfield already exists, do array if ($subfields{$subfieldcode}) { my $subfieldlist=$subfields{$subfieldcode}; ! if ( ref($subfieldlist) eq 'ARRAY' ) { ! # Already an array, add on to it ! print "$tag Adding to array $subfieldcode -- $subfield
    \n" if $debug; ! @subfieldlist=@$subfieldlist; push (@subfieldlist, $subfield); } else { ! # Change simple value to array ! print "$tag Arraying $subfieldcode -- $subfield
    \n" if $debug; @subfieldlist=($subfields{$subfieldcode}, $subfield); } + # keep new array $subfields{$subfieldcode}=\@subfieldlist; } else { + # subfield doesn't exist yet, keep simple value $subfields{$subfieldcode}=$subfield; } *************** *** 1063,1067 **** #---------------------------- # Accept form results to add query to z3950 queue ! sub PostToZ3950Queue { use strict; --- 1051,1055 ---- #---------------------------- # Accept form results to add query to z3950 queue ! sub AcceptZ3950Queue { use strict; *************** *** 1099,1106 **** Number

    \n"; } ! } # sub PostToZ3950Queue #--------------------------------------------- sub AcceptMarcUpload { my ( $dbh, # DBI handle --- 1087,1095 ---- Number

    \n"; } ! } # sub AcceptZ3950Queue #--------------------------------------------- sub AcceptMarcUpload { + use strict; my ( $dbh, # DBI handle *************** *** 1349,1352 **** --- 1338,1342 ---- # values from a DB file sub GetKeyTableSelectOptions { + use strict; # inputs my ( *************** *** 1591,1598 **** --- 1581,1590 ---- #-------------------------------------- sub checkvalidisbn { + use strict; my ($q)=@_ ; my $isbngood = 0; + $q=~s/x$/X/g; # upshift lower case X $q=~s/[^X\d]//g; $q=~s/X.//g; *************** *** 1643,1644 **** --- 1635,1693 ---- } # sub BuildTagMap #------------------------- + sub FormatMarcText { + use strict; + + # Input + my ( + $fields, # list ref to MARC fields + )=@_; + # Return + + my ( + $marctext, + $color, + $field, + $tag, + $label, + $subfieldcode,$subfieldvalue, + ); + + #return "MARC text here"; + + $marctext=" + \n"; + + foreach $field ( @$fields ) { + ($color eq $lc1) ? ($color=$lc2) : ($color=$lc1); + $tag=$field->{'tag'}; + $label=$tagtext{$tag}; + if ( $tag eq 'Leader' ) { + $tag=''; + $label="Leader:"; + } + $marctext.=" \n" . + " \n"; + if ( ! $field->{'subfields'} ) { + $marctext.=""; + } else { + # start another table for subfields + $marctext.="\n"; + } # if subfields + $marctext.="\n"; + + } # foreach field + + $marctext.="
    + MARC RECORD +
    $label$tag$field->{'indicator'}\n " . + " \n"; + foreach $subfieldcode ( sort( keys %{ $field->{'subfields'} } )) { + $subfieldvalue=$field->{'subfields'}->{$subfieldcode}; + $marctext.="" . + "\n"; + } # foreach subfield + $marctext.="
    $subfieldcode $subfieldvalue
    \n"; + + return $marctext; + + } # sub FormatMarcText From rangi at users.sourceforge.net Thu Jun 6 13:49:08 2002 From: rangi at users.sourceforge.net (Chris Cormack) Date: Thu, 06 Jun 2002 04:49:08 -0700 Subject: [Koha-cvs] CVS: koha INSTALL,1.1.2.1,1.1.2.2 ChangeLog,1.1.2.4,1.1.2.5 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv22600 Modified Files: Tag: rel-1-2 INSTALL ChangeLog Log Message: Updated Changelog, and INSTALL should now reflect the new directory structure of the tarball Index: INSTALL =================================================================== RCS file: /cvsroot/koha/koha/INSTALL,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -r1.1.2.1 -r1.1.2.2 *** INSTALL 3 May 2002 21:34:49 -0000 1.1.2.1 --- INSTALL 6 Jun 2002 11:49:06 -0000 1.1.2.2 *************** *** 61,65 **** 6. Create directories for scripts and html documents. Here you need to decide where your scripts and html are going to live. ! And edit C4/Output.pm to reflect that. Set $path= where your includes live, for example: $path="/usr/local/www/koha/htdocs/includes"; --- 61,65 ---- 6. Create directories for scripts and html documents. Here you need to decide where your scripts and html are going to live. ! And edit modules/C4/Output.pm to reflect that. Set $path= where your includes live, for example: $path="/usr/local/www/koha/htdocs/includes"; *************** *** 67,76 **** You do not need to do that if you have already entered the includes path in koha.conf (see example above) ! Next copy the C4 directory (in scripts/) to somewhere in your perl path eg /usr/local/lib/site_perl/i386-linux/ If you do not have sufficient access to copy the files to the default perl folder (maybe you are using your ISPs hosting server) then you can copy the modules to any other location and add a line to apache.conf like: ! SetEnv? PERL5LIB "/usr/local/www/koha/modules" Copy the C4 directory into the modules folder (see detailed example in KohaHints) --- 67,76 ---- You do not need to do that if you have already entered the includes path in koha.conf (see example above) ! Next copy the C4 directory (in modules/) to somewhere in your perl path eg /usr/local/lib/site_perl/i386-linux/ If you do not have sufficient access to copy the files to the default perl folder (maybe you are using your ISPs hosting server) then you can copy the modules to any other location and add a line to apache.conf like: ! SetEnv PERL5LIB "/usr/local/www/koha/modules" Copy the C4 directory into the modules folder (see detailed example in KohaHints) *************** *** 81,85 **** Set up a webspace for the OPAC: For example: You might make /usr/local/www/opac ... and set a virtual host in apache to use that dir In your opac dir make a dir called htdocs, and copy everything in opac-html/ to it. ! Again in ur opac dir make a dir called cgi-bin and copy all the files in scripts/ that have a .pl extension to it, eg copy scripts/*.pl /usr/local/www/opac/cgi-bin/koha/ Your virtual host should be set up to use these dirs, some thing like this: --- 81,86 ---- Set up a webspace for the OPAC: For example: You might make /usr/local/www/opac ... and set a virtual host in apache to use that dir In your opac dir make a dir called htdocs, and copy everything in opac-html/ to it. ! Again in ur opac dir make a dir called cgi-bin and copy all the files in ! opac-cgi/ that have a .pl extension to it, eg copy opac-cgi/*.pl /usr/local/www/opac/cgi-bin/koha/ Your virtual host should be set up to use these dirs, some thing like this: *************** *** 105,110 **** In the dir you have just created make an htdocs dir and a cgi-bin dir Copy everything in intranet-html/ to the htdocs dir ! Copy all the .pl files in scripts/ to the cgi-bin/koha dir ! Make sure ur virtual host is set up to use these dirs Restart apache point your browser at koha.your.site and it should work --- 106,111 ---- In the dir you have just created make an htdocs dir and a cgi-bin dir Copy everything in intranet-html/ to the htdocs dir ! Copy all the .pl files in intranet-cgi/ to the cgi-bin/koha dir ! Make sure your virtual host is set up to use these dirs Restart apache point your browser at koha.your.site and it should work Index: ChangeLog =================================================================== RCS file: /cvsroot/koha/koha/ChangeLog,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -C2 -r1.1.2.4 -r1.1.2.5 *** ChangeLog 7 May 2002 02:32:58 -0000 1.1.2.4 --- ChangeLog 6 Jun 2002 11:49:06 -0000 1.1.2.5 *************** *** 1,25 **** ! Changelog since version 1.1.1 ! 2002-04-17 14:35 pate * C4/Koha.pm: starting to move ethnicity stuff out of programs and into modules ! 2002-04-17 13:28 rangi [...2006 lines suppressed...] ! reservereport.pl, reservereport.xls, simpleredirect.pl, stats2.pl, ! subjectsearch.pl, tidyaccounts.pl, updatebiblio.pl, ! updatecharges.pl, C4/Accounts.pm, C4/Circmain.pm, ! C4/Circulation.pm, C4/Format.pm, C4/Input.pm, C4/InterfaceCDK.pm, ! C4/Reserves.pm, C4/Scan.pm, C4/Security.pm, C4/Stock.pm, ! C4/Circulation/Borrissues.pm, C4/Circulation/Borrower.pm, ! C4/Circulation/Issues.pm, C4/Circulation/Renewals.pm, ! C4/Circulation/Returns.pm, C4/Interface/AccountsCDK.pm, ! C4/Interface/BorrowerCDK.pm, C4/Interface/FlagsCDK.pm, ! C4/Interface/RenewalsCDK.pm, C4/Interface/ReserveentCDK.pm, ! acqui/finishreceive.pl, acqui/modorders.pl, acqui/newbasket.pl, ! acqui/newbasket2.pl, acqui/order.pl, acqui/receive.pl, ! acqui/recieveorder.pl, acqui/supplier.pl, acqui/updatesupplier.pl, ! misc/fixcatalog.pl, misc/fixorders.pl, misc/fixorders.pl2, ! misc/fixrefs.pl, misc/makebaskets.pl, misc/makeformats.pl, ! misc/tidyaccounts.pl, telnet/borrwraper.pl, telnet/circ, ! telnet/doreturns.pl, telnet/issuewrapper.pl, ! telnet/returnswrapper.pl, telnet/startint.pl: Files shifted into ! Sourceforge CVS ! From pate at users.sourceforge.net Thu Jun 6 16:43:45 2002 From: pate at users.sourceforge.net (Pat Eyler) Date: Thu, 06 Jun 2002 07:43:45 -0700 Subject: [Koha-cvs] CVS: koha INSTALL,1.1.2.2,1.1.2.3 Hints,1.1.2.1,1.1.2.2 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv22781 Modified Files: Tag: rel-1-2 INSTALL Hints Log Message: spelling and indentation fixes (mostly) Index: INSTALL =================================================================== RCS file: /cvsroot/koha/koha/INSTALL,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -r1.1.2.2 -r1.1.2.3 *** INSTALL 6 Jun 2002 11:49:06 -0000 1.1.2.2 --- INSTALL 6 Jun 2002 14:43:40 -0000 1.1.2.3 *************** *** 1,15 **** Koha - Requirements and quick-start installation guide ! INSTALL document included with [Koha] ! ! For information on how to install Koha without requiring multiple virtual servers - See KohaAllInOne. ! For additional information on how your Configuration files should look see the Hints file. Important.... To successfully use Koha you need some additional software: ! A webserver (It was built to work with Apache, but there is no reason it shouldnt work with any other webserver). Mysql (You could intead use postgres, or another sql based database) ! Perl (mod_perl isnt needed, tho koha should work with mod_perl but this hasnt been tested yet). Perl Modules: --- 1,15 ---- Koha - Requirements and quick-start installation guide ! For additional information on how your Configuration files should look ! see the Hints file. Important.... To successfully use Koha you need some additional software: ! A webserver (It was built to work with Apache, but there is no reason ! it shouldn't work with any other webserver). Mysql (You could intead use postgres, or another sql based database) ! Perl (mod_perl isn't needed, though koha should work with mod_perl -- ! note that this hasn't been tested yet). Perl Modules: *************** *** 20,24 **** DBD::mysql (or whatever database system you use) AuthenDBI (if you want to use Database based authentication) ! CDK (for the telnet interface not nessecary if you plan to use the web based circulation module) also requires installation of the C CDK libraries http://www.vexus.ca/CDK.html ( CDKModuleHasProblems ) -------------------------------------------------------------------------------- --- 20,26 ---- DBD::mysql (or whatever database system you use) AuthenDBI (if you want to use Database based authentication) ! CDK (for the telnet interface not necessary if you plan to use the web ! based circulation module) also requires installation of the C CDK ! libraries http://www.vexus.ca/CDK.html ( CDKModuleHasProblems ) -------------------------------------------------------------------------------- *************** *** 35,39 **** Log in to mysql: mysql -uroot -ppassword ! To create a user called "koha" who has full administrative rights to the "Koha" database when autheicting from "localhost", enter the following on mysql command line: grant all privileges on Koha.* to koha at localhost identified by 'kohapassword'; --- 37,43 ---- Log in to mysql: mysql -uroot -ppassword ! To create a user called "koha" who has full administrative rights to ! the "Koha" database when autheicting from "localhost", enter the ! following on mysql command line: grant all privileges on Koha.* to koha at localhost identified by 'kohapassword'; *************** *** 49,60 **** 4. Edit koha.conf ! Set the database name to what you have called your database, hostname willprobably stay as localhost (unless you are installing the database on a different machine to the webserver) User and password should be changed to reflect the username and password you have chosen above. ! ! You can include a line called "includes= " with path to your includes folder instead of entering the path in Output.pm - see example in KohaHints. 5. Copy koha.conf to /etc/ ! The permissions on this config file should also be strict, since they contain the database password. At a minimum, the apache user needs to be able to read it, as well as any other user that runs circ. ! I would suggest ownership of www-data.libadmins with no access to others.libadmins contain all users that use koha (If you set the owner as www-data u will need to make sure apache is running as www-data) --- 53,74 ---- 4. Edit koha.conf ! Set the database name to what you have called your database, hostname ! willprobably stay as localhost (unless you are installing the database ! on a different machine to the webserver) User and password should be ! changed to reflect the username and password you have chosen above. ! ! You can include a line called "includes= " with path to your includes ! folder instead of entering the path in Output.pm - see example in ! Hints. 5. Copy koha.conf to /etc/ ! The permissions on this config file should also be strict, since they ! contain the database password. At a minimum, the apache user needs to ! be able to read it, as well as any other user that runs circ. ! ! I would suggest ownership of www-data.libadmins with no access to ! others.libadmins contain all users that use koha (If you set the owner ! as www-data u will need to make sure apache is running as www-data) *************** *** 65,86 **** for example: $path="/usr/local/www/koha/htdocs/includes"; ! You do not need to do that if you have already entered the includes path in koha.conf (see example above) Next copy the C4 directory (in modules/) to somewhere in your perl path eg /usr/local/lib/site_perl/i386-linux/ ! If you do not have sufficient access to copy the files to the default perl folder (maybe you are using your ISPs hosting server) then you can copy the modules to any other location and add a line to apache.conf like: SetEnv PERL5LIB "/usr/local/www/koha/modules" ! Copy the C4 directory into the modules folder (see detailed example in KohaHints) 7. Set up your Online Public Access Catalogue (OPAC) ! Set up a webspace for the OPAC: For example: You might make /usr/local/www/opac ... and set a virtual host in apache to use that dir ! In your opac dir make a dir called htdocs, and copy everything in opac-html/ to it. Again in ur opac dir make a dir called cgi-bin and copy all the files in ! opac-cgi/ that have a .pl extension to it, eg copy opac-cgi/*.pl /usr/local/www/opac/cgi-bin/koha/ Your virtual host should be set up to use these dirs, some thing like this: --- 79,109 ---- for example: $path="/usr/local/www/koha/htdocs/includes"; ! You do not need to do that if you have already entered the includes ! path in koha.conf (see example above) Next copy the C4 directory (in modules/) to somewhere in your perl path eg /usr/local/lib/site_perl/i386-linux/ ! If you do not have sufficient access to copy the files to the default ! perl folder (maybe you are using your ISPs hosting server) then you ! can copy the modules to any other location and add a line to ! apache.conf like: SetEnv PERL5LIB "/usr/local/www/koha/modules" ! Copy the C4 directory into the modules folder (see detailed example in ! Hints) 7. Set up your Online Public Access Catalogue (OPAC) ! Set up a webspace for the OPAC: For example: You might make ! /usr/local/www/opac ... and set a virtual host in apache to use that ! dir ! In your opac dir make a dir called htdocs, and copy everything in ! opac-html/ to it. Again in ur opac dir make a dir called cgi-bin and copy all the files in ! opac-cgi/ that have a .pl extension to it, eg copy opac-cgi/*.pl ! /usr/local/www/opac/cgi-bin/koha/ Your virtual host should be set up to use these dirs, some thing like this: *************** *** 95,105 **** ! When finished, restart apache and point your browser at opac.your.site and it should be all go (of course - if you dont have any data in the database there wont be much to see!) ! Find supplementary information and config examples in KohaHints 8. Set up the intranet/librarian interface ! Create new directories and additional httpd.conf changes to Set up another webspace. Lets call it koha. For example: --- 118,131 ---- ! When finished, restart apache and point your browser at opac.your.site ! and it should be all go (of course - if you dont have any data in the ! database there won't be much to see!) ! Find supplementary information and config examples in Hints 8. Set up the intranet/librarian interface ! Create new directories and additional httpd.conf changes to Set up ! another webspace. Lets call it koha. For example: *************** *** 112,132 **** 9. Configure SECURITY for the Librarians/Intranet Interface ! If you are using AuthenDBI to do your authentication, you will need to add some users to the users table in the koha database. And edit your apache conf file to use AuthenDBI on the intranet site. ! ! Otherwise, set up htaccess files in both koha/htdocs/ and koha/cgi-bin You can use general .htaccess based security. It is important though to password protect the librarians interface because from it you can delete and add items, remove borrowers fines and generally case havoc. 10. Set up Issues, Returns and Telnet interface. ! Since we have already copied the files in scripts/C4 into somewhere in our perl source tree ! We just need to now copy the scripts from scripts/telnet/ into somewhere in the executable path, eg /usr/local/bin Then its done: type circ and your away, ready to issue and return. ! In release 1.1.0 on there is now a webbased circulation module, So issues and returns can be done from there, or from circ. - You will find some Koha config examples in KohaHints - Check out KohaMiniFAQ for general, supplementary information. --- 138,168 ---- 9. Configure SECURITY for the Librarians/Intranet Interface ! If you are using AuthenDBI to do your authentication, you will need to ! add some users to the users table in the koha database. And edit your ! apache conf file to use AuthenDBI on the intranet site. ! ! Otherwise, set up htaccess files in both koha/htdocs/ and koha/cgi-bin ! You can use general .htaccess based security. It is important though ! to password protect the librarians interface because from it you can ! delete and add items, remove borrowers fines and generally case ! havoc. 10. Set up Issues, Returns and Telnet interface. ! Since we have already copied the files in scripts/C4 into somewhere in ! our perl source tree ! We just need to now copy the scripts from scripts/telnet/ into ! somewhere in the executable path, eg /usr/local/bin Then its done: type circ and your away, ready to issue and return. ! In release 1.1.0 on there is now a web-based circulation module, So ! issues and returns can be done from there, or from circ. ! ! ! You will find some Koha config examples in Hints Index: Hints =================================================================== RCS file: /cvsroot/koha/koha/Hints,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -r1.1.2.1 -r1.1.2.2 *** Hints 3 May 2002 21:34:49 -0000 1.1.2.1 --- Hints 6 Jun 2002 14:43:41 -0000 1.1.2.2 *************** *** 6,10 **** pass=xxxxxx includes=/usr/local/www/koha/htdocs/includes ! Please note the final line (includes=path) - The path entry can be used as an alternative to manually editing the path in Output.pm file (see INSTALL manual). --- 6,13 ---- pass=xxxxxx includes=/usr/local/www/koha/htdocs/includes ! ! Please note the final line (includes=path) - The path entry can be ! used as an alternative to manually editing the path in Output.pm file ! (see INSTALL manual). *************** *** 15,19 **** http://httpd.apache.org/docs/mod/mod_include.html ! If your page headers and footers do not show, then you may need to re-configure your web server. Here is an example of entries suitable for Apache httpd.conf: --- 18,24 ---- http://httpd.apache.org/docs/mod/mod_include.html ! ! If your page headers and footers do not show, then you may need to ! re-configure your web server. Here is an example of entries suitable for Apache httpd.conf: *************** *** 88,90 **** ! Read your web server docs for more information about how Server Side Includes work. --- 93,99 ---- ! Read your web server docs for more information about how Server Side ! Includes work. ! ! ! From pate at users.sourceforge.net Thu Jun 6 16:50:36 2002 From: pate at users.sourceforge.net (Pat Eyler) Date: Thu, 06 Jun 2002 07:50:36 -0700 Subject: [Koha-cvs] CVS: koha installer.pl,1.2.2.11,1.2.2.12 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv25835 Modified Files: Tag: rel-1-2 installer.pl Log Message: minor doc tweaks (and two suggestions) Index: installer.pl =================================================================== RCS file: /cvsroot/koha/koha/installer.pl,v retrieving revision 1.2.2.11 retrieving revision 1.2.2.12 diff -C2 -r1.2.2.11 -r1.2.2.12 *** installer.pl 26 May 2002 10:25:22 -0000 1.2.2.11 --- installer.pl 6 Jun 2002 14:50:32 -0000 1.2.2.12 *************** *** 198,202 **** |; ! #Get the password for the database user do { print "Enter installation path:"; --- 198,202 ---- |; ! #Get the installation path for OPAC do { print "Enter installation path:"; *************** *** 206,209 **** --- 206,213 ---- #Create the configuration file + # FIXME + # maybe this should warn instead of dieing, and write to stdout if + # the config file can't be opened for writing + # open(SITES,">$conf_path/koha.conf") or die "Couldn't create file at $conf_path. Must have write capability.\n"; *************** *** 236,240 **** # # Set ownership of the koha.conf file for security ! # FIXME - this will only work if run as work. # --- 240,244 ---- # # Set ownership of the koha.conf file for security ! # FIXME - this will only work if run as root. # *************** *** 299,302 **** --- 303,310 ---- # Update Apache Conf File. # + # FIXME + # maybe this should warn instead of dieing, and write to stdout if + # the config file can't be opened for writing + # open(SITES,">>$apache_conf_path") or die "Couldn't write to file $conf_path. Must have write capability.\n"; *************** *** 331,332 **** --- 339,344 ---- print "\nCongratulations ... your Koha installation is complete!\n"; print "\nYou will need to restart your webserver before using Koha!\n"; + + + + From tipaul at users.sourceforge.net Thu Jun 6 18:23:39 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Thu, 06 Jun 2002 09:23:39 -0700 Subject: [Koha-cvs] CVS: koha/C4 test.pl,1.1,1.2 Catalogue.pm,1.16,1.17 Message-ID: Update of /cvsroot/koha/koha/C4 In directory usw-pr-cvs1:/tmp/cvs-serv26447/C4 Modified Files: test.pl Catalogue.pm Log Message: today stuff around marc. Will change soon as we will use MARC::record (see marcpm.sourceforge.net) Index: test.pl =================================================================== RCS file: /cvsroot/koha/koha/C4/test.pl,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** test.pl 4 Jun 2002 16:08:47 -0000 1.1 --- test.pl 6 Jun 2002 16:23:36 -0000 1.2 *************** *** 8,15 **** $dbh->do("delete from marc_subfield_table"); $dbh->do("delete from marc_blob_subfield"); ! &addSubfield(1,'001','a','1 - This is a value',1); ! &addSubfield(1,'001','b','2 - This is another value',1); ! &addSubfield(1,'001','c',"3 - This is a value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff",1); ! &addSubfield(1,'001','d',"4 - This is another value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff",1); print "change 1\n"; &changeSubfield(1,"1new - this is a changed value"); --- 8,15 ---- $dbh->do("delete from marc_subfield_table"); $dbh->do("delete from marc_blob_subfield"); ! &addSubfield(1,'001','a',1,'1 - This is a value'); ! &addSubfield(1,'001','b',1,'2 - This is another value'); ! &addSubfield(1,'001','c',1,"3 - This is a value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff"); ! &addSubfield(1,'001','d',1,"4 - This is another value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff"); print "change 1\n"; &changeSubfield(1,"1new - this is a changed value"); *************** *** 22,59 **** my $x= &findSubfield(1,'001','a','',1); print "subfieldid : $x\n"; ! my $marcstru={}; ! $marcstru->{bibid}=58973; ! $marcstru->{tags}->{1}->{tag}='110'; ! $marcstru->{tags}->{1}->{tagorder}=1; ! $marcstru->{tags}->{1}->{subfields}->{1}->{mark}='a'; ! $marcstru->{tags}->{1}->{subfields}->{1}->{subfieldorder}=1; ! $marcstru->{tags}->{1}->{subfields}->{1}->{value}='this is a test'; ! $marcstru->{tags}->{1}->{subfields}->{2}->{mark}='b'; ! $marcstru->{tags}->{1}->{subfields}->{2}->{subfieldorder}=1; ! $marcstru->{tags}->{1}->{subfields}->{2}->{value}='this is another test'; ! $marcstru->{tags}->{2}->{tag}='220'; ! $marcstru->{tags}->{2}->{tagorder}=1; ! $marcstru->{tags}->{2}->{subfields}->{1}->{mark}='a'; ! $marcstru->{tags}->{2}->{subfields}->{1}->{subfieldorder}=1; ! $marcstru->{tags}->{2}->{subfields}->{1}->{value}='this is a test for 220'; ! $marcstru->{tags}->{2}->{subfields}->{2}->{mark}='b'; ! $marcstru->{tags}->{2}->{subfields}->{2}->{subfieldorder}=1; ! $marcstru->{tags}->{2}->{subfields}->{2}->{value}='this is another test for 220'; ! $marcstru->{tags}->{2}->{subfields}->{3}->{mark}='b'; ! $marcstru->{tags}->{2}->{subfields}->{3}->{subfieldorder}=2; ! $marcstru->{tags}->{2}->{subfields}->{3}->{value}='this is a third test for 220'; ! $marcstru->{tags}->{3}->{tag}='330'; ! $marcstru->{tags}->{3}->{tagorder}=1; ! $marcstru->{tags}->{3}->{subfields}->{1}->{mark}='a'; ! $marcstru->{tags}->{3}->{subfields}->{1}->{subfieldorder}=1; ! $marcstru->{tags}->{3}->{subfields}->{1}->{value}='this is a test for 330'; ! $marcstru->{tags}->{3}->{subfields}->{2}->{mark}='b'; ! $marcstru->{tags}->{3}->{subfields}->{2}->{subfieldorder}=1; ! $marcstru->{tags}->{3}->{subfields}->{2}->{value}='this is another test for 330'; ! $marcstru->{tags}->{3}->{subfields}->{3}->{mark}='b'; ! $marcstru->{tags}->{3}->{subfields}->{3}->{subfieldorder}=2; ! $marcstru->{tags}->{3}->{subfields}->{3}->{value}='this is a third test for 330'; ! &addMarcBiblio($marcstru); --- 22,39 ---- my $x= &findSubfield(1,'001','a','',1); print "subfieldid : $x\n"; ! my $record={}; ! #$marcstru->{bibid}=58973; # calculated auto_increment in addMarcBiblio ! $record->{bibid}=58973; ! $record->{tags}->{110}->{1}->{indicator}='##'; ! $record->{tags}->{110}->{1}->{subfields}->{a}->{1}='first text'; ! $record->{tags}->{110}->{1}->{subfields}->{a}->{2}='second text'; ! $record->{tags}->{110}->{1}->{subfields}->{b}->{3}='third text'; ! $record->{tags}->{120}->{1}->{indicator}='##'; ! $record->{tags}->{120}->{1}->{subfields}->{a}->{1}='last text ??'; ! $record->{tags}->{120}->{2}->{indicator}='01'; ! $record->{tags}->{120}->{2}->{subfields}->{n}->{1}='no, another text'; ! print "NEXT IS : ".nextsubfieldid($record->{tags}->{110}->{1}->{subfields})."\n"; ! &addMarcBiblio($record); Index: Catalogue.pm =================================================================== RCS file: /cvsroot/koha/koha/C4/Catalogue.pm,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** Catalogue.pm 4 Jun 2002 16:08:47 -0000 1.16 --- Catalogue.pm 6 Jun 2002 16:23:37 -0000 1.17 *************** *** 22,26 **** @EXPORT = qw(&newBiblio &newBiblioItem &newItem &updateBiblio &updateBiblioItem &updateItem &changeSubfield &addSubfield &findSubfield ! &addMarcBiblio &getorders &bookseller &breakdown &basket &newbasket &bookfunds --- 22,26 ---- @EXPORT = qw(&newBiblio &newBiblioItem &newItem &updateBiblio &updateBiblioItem &updateItem &changeSubfield &addSubfield &findSubfield ! &addMarcBiblio &nextsubfieldid &getorders &bookseller &breakdown &basket &newbasket &bookfunds *************** *** 226,232 **** my ($marcstructure) = @_; my $dbh=C4Connect; ! my $tags; ! my $i; ! my $j; # adding main table, and retrieving bibid $dbh->do("lock tables marc_biblio WRITE"); --- 226,233 ---- my ($marcstructure) = @_; my $dbh=C4Connect; ! my $tag; ! my $tagorder; ! my $subfield; ! my $subfieldorder; # adding main table, and retrieving bibid $dbh->do("lock tables marc_biblio WRITE"); *************** *** 240,257 **** $dbh->do("unlock tables"); # now, add subfields... ! foreach $tags ($marcstructure->{tags}) { ! foreach $i (keys %{$tags}) { ! foreach $j (keys %{$tags->{$i}->{subfields}}) { ! &addSubfield($marcstructure->{bibid}, ! $tags->{$i}->{tag}, ! $tags->{$i}->{tagorder}, ! $tags->{$i}->{subfields}->{$j}->{mark}, ! $tags->{$i}->{subfields}->{$j}->{subfieldorder}, ! $tags->{$i}->{subfields}->{$j}->{value} ! ); ! print $tags->{$i}->{tag}."//".$tags->{$i}->{subfields}->{$j}->{value}."\n"; } } } } --- 241,297 ---- $dbh->do("unlock tables"); # now, add subfields... ! foreach $tag (keys %{$marcstructure->{tags}}) { ! foreach $tagorder (keys %{$marcstructure->{tags}->{$tag}}) { ! foreach $subfield (keys %{$marcstructure->{tags}->{$tag}->{$tagorder}->{subfields}}) { ! foreach $subfieldorder (keys %{$marcstructure->{tags}->{$tag}->{$tagorder}->{subfields}->{$subfield}}) { ! &addSubfield($marcstructure->{bibid}, ! $tag, ! $tagorder, ! $subfield, ! $subfieldorder, ! $marcstructure->{tags}->{$tag}->{$tagorder}->{subfields}->{$subfield}->{$subfieldorder} ! ); ! # print "$tag / $tagorder / $subfield / $subfieldorder / ".$marcstructure->{tags}->{$tag}->{$tagorder}->{subfields}->{$subfield}->{$subfieldorder}."\n"; ! } } } } + } + + sub buildPerlmarcstructure { + # this function builds perlmarcstructure from the old koha-DB fields + my ($biblionumber,$author,$title,$unititle,$notes,$abstract, + $serial,$seriestitle,$copyrightdate,$biblioitemnumber,$volume,$number, + $classification,$itemtype,$isbn,$issn, + $dewey,$subclass,$publicationyear,$publishercode, + $volumedate,$illus,$pages,$notes, + $size,$place,$lccn) = @_; + + my $tagfield; + my $tagsubfield; + my $perlmarcstructure={}; + my $i=0; + my $dbh=&C4Connect; + my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?"); + $sth->execute("biblionumber"); + if (($tagfield,$tagsubfield)=$sth->fetchrow) { + $i=nextsubfieldid($perlmarcstructure->{tags}->{$tagfield}->{1}->{subfields}->{$tagsubfield}); + $perlmarcstructure->{tags}->{$i}->{tag}=$tagfield; + $perlmarcstructure->{tags}->{$i}->{tagorder}=1; + $perlmarcstructure->{tags}->{$i}->{indicator}='##'; + } + } + + sub nextsubfieldid { + my $subfieldhash=shift; + my $maxsubfieldnumber=0; + my $subfield; + my $number; + foreach $subfield (keys %$subfieldhash) { + foreach $number (keys %{$subfieldhash->{$subfield}}) { + ($number>$maxsubfieldnumber) && ($maxsubfieldnumber=$number); + } + } + return $maxsubfieldnumber+1; } From tipaul at users.sourceforge.net Thu Jun 6 18:23:39 2002 From: tipaul at users.sourceforge.net (Paul POULAIN) Date: Thu, 06 Jun 2002 09:23:39 -0700 Subject: [Koha-cvs] CVS: koha/marc perlmarcstructure,1.3,1.4 Message-ID: Update of /cvsroot/koha/koha/marc In directory usw-pr-cvs1:/tmp/cvs-serv26447/marc Modified Files: perlmarcstructure Log Message: today stuff around marc. Will change soon as we will use MARC::record (see marcpm.sourceforge.net) Index: perlmarcstructure =================================================================== RCS file: /cvsroot/koha/koha/marc/perlmarcstructure,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** perlmarcstructure 5 Jun 2002 13:05:19 -0000 1.3 --- perlmarcstructure 6 Jun 2002 16:23:37 -0000 1.4 *************** *** 30,45 **** in perlmarcstructure, it can be writen : ! $record->{bibid}=58973 $record->{tags}->{110}->{1}->{indicator}='##'; ! $record->{tags}->{110}->{1}->->{a}->{1}='first text'; ! $record->{tags}->{110}->{1}->{a}->{2}='second text'; ! $record->{tags}->{110}->{1}->{b}->{1}='third text'; $record->{tags}->{120}->{1}->{indicator}='##'; ! $record->{tags}->{120}->{1}->{a}->{1}='last text ??'; $record->{tags}->{120}->{2}->{indicator}='01'; ! $record->{tags}->{120}->{2}->{n}->{1}='no, another text'; ! This takes care of possible repeating tags and subfields as well as ordering of --- 30,44 ---- in perlmarcstructure, it can be writen : ! $record->{bibid}=58973; $record->{tags}->{110}->{1}->{indicator}='##'; ! $record->{tags}->{110}->{1}->{subfields}->{a}->{1}='first text'; ! $record->{tags}->{110}->{1}->{subfields}->{a}->{2}='second text'; ! $record->{tags}->{110}->{1}->{subfields}->{b}->{1}='third text'; $record->{tags}->{120}->{1}->{indicator}='##'; ! $record->{tags}->{120}->{1}->{subfields}->{a}->{1}='last text ??'; $record->{tags}->{120}->{2}->{indicator}='01'; ! $record->{tags}->{120}->{2}->{subfields}->{n}->{1}='no, another text'; This takes care of possible repeating tags and subfields as well as ordering of From amillar at users.sourceforge.net Thu Jun 6 21:18:06 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Thu, 06 Jun 2002 12:18:06 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.13,1.6.2.14 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv19200 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: minor comments and cosmetics Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.13 retrieving revision 1.6.2.14 diff -C2 -r1.6.2.13 -r1.6.2.14 *** marcimport.pl 6 Jun 2002 07:32:20 -0000 1.6.2.13 --- marcimport.pl 6 Jun 2002 19:18:01 -0000 1.6.2.14 *************** *** 760,765 **** return $bib; - #--------------------------------- } # sub extractmarcfields sub z3950menu { --- 760,765 ---- return $bib; } # sub extractmarcfields + #--------------------------------- sub z3950menu { *************** *** 905,908 **** --- 905,909 ---- print "\n"; } # sub z3950menu + #--------------------------------- sub uploadmarc { *************** *** 1165,1169 **** EOF } else { - use strict; # It doesn't exist; add it. --- 1166,1169 ---- *************** *** 1531,1534 **** --- 1531,1535 ---- sub addz3950queue { use strict; + # input my ( $dbh, # DBI handle *************** *** 1564,1568 **** foreach (@serverlist) { $serverlist.="$_ "; ! } chop $serverlist; --- 1565,1569 ---- foreach (@serverlist) { $serverlist.="$_ "; ! } # foreach chop $serverlist; *************** *** 1607,1611 **** } else { $isbngood=0; ! } return $isbngood; --- 1608,1612 ---- } else { $isbngood=0; ! } # if length good return $isbngood; From amillar at users.sourceforge.net Thu Jun 6 21:51:24 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Thu, 06 Jun 2002 12:51:24 -0700 Subject: [Koha-cvs] CVS: koha/updater updatedatabase,1.4.2.1,1.4.2.2 Message-ID: Update of /cvsroot/koha/koha/updater In directory usw-pr-cvs1:/tmp/cvs-serv28320 Modified Files: Tag: rel-1-2 updatedatabase Log Message: Changed field additions to data-driven structure. Add abstract column to biblio. Make deletedbiblio and deletedbiblioitems consistent with biblio and biblioitems Index: updatedatabase =================================================================== RCS file: /cvsroot/koha/koha/updater/updatedatabase,v retrieving revision 1.4.2.1 retrieving revision 1.4.2.2 diff -C2 -r1.4.2.1 -r1.4.2.2 *** updatedatabase 29 May 2002 15:14:09 -0000 1.4.2.1 --- updatedatabase 6 Jun 2002 19:51:22 -0000 1.4.2.2 *************** *** 18,24 **** use C4::Database; ! my %existingtables; # tables already in database ! my %types; ! my $table; #------------------- --- 18,32 ---- use C4::Database; ! my $debug=1; ! ! my ( ! $sth, ! $query, ! %existingtables, # tables already in database ! %types, ! $table, ! $column, ! $type, $null, $key, $default, $extra, ! ); #------------------- *************** *** 56,59 **** --- 64,77 ---- ); + my %requirefields=( + biblio=>{ 'abstract' => 'text' }, + deletedbiblio=>{ 'abstract' => 'text' }, + biblioitems=>{ 'lccn' => 'char(25)', + 'marc' => 'text' }, + deletedbiblioitems=>{ 'lccn' => 'char(25)', + 'marc' => 'text' }, + branchtransfers=>{ 'datearrived' => 'datetime' }, + ); + #------------------- # Initialize *************** *** 74,78 **** # Collect all tables into a list ! my $sth=$dbh->prepare("show tables"); $sth->execute; while (my ($table) = $sth->fetchrow) { --- 92,96 ---- # Collect all tables into a list ! $sth=$dbh->prepare("show tables"); $sth->execute; while (my ($table) = $sth->fetchrow) { *************** *** 82,85 **** --- 100,104 ---- # Now add any missing tables foreach $table ( keys %requiretables ) { + print "Checking $table table...\n" if $debug;; unless ($existingtables{$table} ) { print "Adding $table table...\n"; *************** *** 93,97 **** } # unless exists } # foreach - exit; unless ($existingtables{'z3950servers'}) { --- 112,115 ---- *************** *** 121,148 **** # Columns ! # Get list of columns from biblioitems table ! ! my $sth=$dbh->prepare("show columns from biblioitems"); ! $sth->execute; ! while (my ($column, $type, $null, $key, $default, $extra) = $sth->fetchrow) { ! $types{$column}=$type; ! } ! unless ($types{'lccn'}) { ! # Add LCCN field to biblioitems db ! print "Adding lccn field to biblioitems table...\n"; ! my $sti=$dbh->prepare("alter table biblioitems ! add column lccn char(25)"); ! $sti->execute; ! } ! unless ($types{'marc'}) { ! # Add MARC field to biblioitems db (not used anymore) ! print "Adding marc field to biblioitems table...\n"; ! my $sti=$dbh->prepare("alter table biblioitems ! add column marc text"); ! $sti->execute; ! } ! ! # Get list of columns from biblioitems table my %itemtypes; --- 139,170 ---- # Columns + foreach $table ( keys %requirefields ) { + print "Check table $table\n"; + $sth=$dbh->prepare("show columns from $table"); + $sth->execute(); + undef %types; + while ( ($column, $type, $null, $key, $default, $extra) + = $sth->fetchrow) { + $types{$column}=$type; + } # while + foreach $column ( keys %{ $requirefields{$table} } ) { + print " Check column $column\n"; + if ( ! $types{$column} ) { + # column doesn't exist + print "Adding $column field to $table table...\n"; + $query="alter table $table + add column $column " . $requirefields{$table}->{$column} ; + print "Execute: $query\n" if $debug; + my $sti=$dbh->prepare($query); + $sti->execute; + if ($sti->err) { + print "**Error : $sti->errstr \n"; + $sti->finish; + } # if error + } # if column + } # foreach column + } # foreach table ! # Get list of columns from items table my %itemtypes; From finlayt at users.sourceforge.net Fri Jun 7 01:30:42 2002 From: finlayt at users.sourceforge.net (Finlay Thompson) Date: Thu, 06 Jun 2002 16:30:42 -0700 Subject: [Koha-cvs] CVS: koha request.pl,1.2,1.3 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv23069 Modified Files: request.pl Log Message: rewrite, so that it correctly displays branches and waiting reserves. Index: request.pl =================================================================== RCS file: /cvsroot/koha/koha/request.pl,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** request.pl 8 Apr 2002 23:44:43 -0000 1.2 --- request.pl 6 Jun 2002 23:30:39 -0000 1.3 *************** *** 11,17 **** --- 11,174 ---- use C4::Acquisitions; use C4::Koha; + use C4::Circulation::Circ2; use CGI; my $input = new CGI; + + # get biblio information.... + my $bib = $input->param('bib'); + my $dat = bibdata($bib); + + # get existing reserves ..... + my ($count,$reserves) = FindReserves($bib); + foreach my $res (@$reserves) { + if ($res->{'found'} eq 'W') { + $count--; + } + } + + # make priorities options + my $num = $count + 1; + my $priorityoptions = priorityoptions($num, $num); + + + # get branch information + my $branch = $input->cookie('branch'); + my $branches = getbranches(); + + warn $branch; + + my $branchoptions = branchoptions($branch); + + + # todays date + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time); + $year=$year+1900; + $mon++; + my $date="$mday/$mon/$year"; + + + + + # get biblioitem information and build rows for form + my ($count2, at data) = bibitems($bib); + my $bibitemrows = ""; + for (my $i=0; $i<$count2; $i++){ + my @barcodes = barcodes($data[$i]->{'biblioitemnumber'}); + if ($data[$i]->{'dewey'} == 0){ + $data[$i]->{'dewey'}=""; + } + $data[$i]->{'dewey'}=~ s/\.0000$//; + $data[$i]->{'dewey'}=~ s/00$//; + my $class="$data[$i]->{'classification'}$data[$i]->{'dewey'}$data[$i]->{'subclass'}"; + $bibitemrows .= <<"EOF"; + + {'biblioitemnumber'}> + {'biblioitemnumber'}> + + $data[$i]->{'description'} + $class + $data[$i]->{'volumeddesc'} + $data[$i]->{'isbn'} + $dat->{'copyrightdate'} + $data[$i]->{'publicationyear'} + @barcodes + + EOF + } + + + + my $existingreserves = ""; + foreach my $res (sort {$a->{'found'} cmp $b->{'found'}} @$reserves){ + #my $bor=$reserves->[$i]{'firstname'}."%20".$reserves->[$i]{'surname'}; + #$bor=~ s/ /%20/g; + my $prioropt = priorityoptions($count, $res->{'priority'}); + my $bropt = branchoptions($res->{'branchcode'}); + warn $res->{'branchcode'}; + my $bor=$res->{'borrowernumber'}; + $date = slashifyDate($res->{'reservedate'}); + + my $type=$res->{'constrainttype'}; + if ($type eq 'a'){ + $type='Next Available'; + } elsif ($type eq 'o'){ + $type="This type only $res->{'volumeddesc'} $res->{'itemtype'}"; + } + + my $notes = $res->{'reservenotes'}." "; + my $rank; + my $pickup; + my $change; + if ($res->{'found'} eq 'W') { + my %env; + my $item = $res->{'itemnumber'}; + $item = getiteminformation(\%env,$item); + $item = "{'biblionumber'} &type=intra onClick=\"openWindow(this, 'Item', 480, 640)\">$item->{'barcode'}"; + my $wbra = $branches->{$res->{'branchcode'}}->{'branchname'}; + $rank = "Item waiting"; + $type = $item; + $pickup = "at ".$wbra.""; + $change = "delete"; + } else { + $rank = ""; + $pickup = ""; + $change = ""; + } + $existingreserves .= <<"EOF"; + {'borrowernumber'}> + {'biblionumber'}> + + $rank + + $res->{'firstname'} $res->{'surname'} + + $notes + $date + $pickup + $type + $change + + EOF + } + + + + sub priorityoptions { + my ($count, $sel) = @_; + my $out = ""; + for (my $i=1; $i<=$count; $i++){ + $out .= "

    - -
    --- 188,200 ---- ! Requesting:
    ! $dat->{'title'} ! ($dat->{'author'})

    *************** *** 53,91 **** ! ! ! ! ! ! ! ! ! !
    $dateNext Available,
    (or choose from list below)

    --- 207,222 ---- ! ! ! ! $date ! ! Next Available, !
    (or choose from list below) !

    *************** *** 103,136 **** Copies ! printend ! ; ! my $blah; ! my ($count2, at data)=bibitems($bib); ! for ($i=0;$i<$count2;$i++){ ! my @barcodes=barcodes($data[$i]->{'biblioitemnumber'}); ! if ($data[$i]->{'dewey'} == 0){ ! $data[$i]->{'dewey'}=""; ! } ! $data[$i]->{'dewey'}=~ s/\.0000$//; ! $data[$i]->{'dewey'}=~ s/00$//; ! my $class="$data[$i]->{'classification'}$data[$i]->{'dewey'}$data[$i]->{'subclass'}"; ! print " ! {'biblioitemnumber'}> ! {'biblioitemnumber'}> ! ! $data[$i]->{'description'} ! $class ! $data[$i]->{'volumeddesc'} ! $data[$i]->{'isbn'} ! $dat->{'copyrightdate'} ! $data[$i]->{'publicationyear'} ! @barcodes ! "; ! } ! print <

    !

     

    --- 234,245 ---- Copies ! $bibitemrows

    !

     

    ! ! ! *************** *** 152,240 **** Change To ! printend ! ; ! $count--; ! ! for ($i=0;$i<$count;$i++){ ! print "[$i]{'borrowernumber'}>"; ! print "[$i]{'biblionumber'}>"; ! #my $bor=$reserves->[$i]{'firstname'}."%20".$reserves->[$i]{'surname'}; ! #$bor=~ s/ /%20/g; ! my $bor=$reserves->[$i]{'borrowernumber'}; ! $date = slashifyDate($reserves->[$i]{'reservedate'}); ! ! my $type=$reserves->[$i]{'constrainttype'}; ! #print "test"; ! if ($type eq 'a'){ ! $type='Next Available'; ! } elsif ($type eq 'o'){ ! # print "test"; ! my $res=getreservetitle($reserves->[$i]{'biblionumber'},$reserves->[$i]{'borrowernumber'},$reserves->[$i]{'reservedate'},$reserves->[$i]{'timestamp'}); ! $type="This type only $res->{'volumeddesc'} $res->{'itemtype'}"; ! # my @data=ItemInfo(\$blah,$reserves->[$i]{'borrowernumber'}); ! ! } ! print " ! ! ! $reserves->[$i]{'firstname'} $reserves->[$i]{'surname'} ! $reserves->[$i]{'reservenotes'} ! $date ! ! ! $type ! ! ! ! "; ! } ! print < ! Delete a request by selecting "del" from the rank list. - - - - -

    -
    - - - - printend ; --- 261,275 ---- Change To ! $existingreserves ! Delete a request by selecting "del" from the rank list.


    + printend ; From amillar at users.sourceforge.net Sun Jun 9 07:28:28 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Sat, 08 Jun 2002 22:28:28 -0700 Subject: [Koha-cvs] CVS: koha/updater updatedatabase,1.4.2.2,1.4.2.3 Message-ID: Update of /cvsroot/koha/koha/updater In directory usw-pr-cvs1:/tmp/cvs-serv15534/updater Modified Files: Tag: rel-1-2 updatedatabase Log Message: Sync biblioitems fields between acqui, acqui.simple, and updatedatabase Index: updatedatabase =================================================================== RCS file: /cvsroot/koha/koha/updater/updatedatabase,v retrieving revision 1.4.2.2 retrieving revision 1.4.2.3 diff -C2 -r1.4.2.2 -r1.4.2.3 *** updatedatabase 6 Jun 2002 19:51:22 -0000 1.4.2.2 --- updatedatabase 9 Jun 2002 05:28:26 -0000 1.4.2.3 *************** *** 18,22 **** use C4::Database; ! my $debug=1; my ( --- 18,22 ---- use C4::Database; ! my $debug=0; my ( *************** *** 68,73 **** --- 68,75 ---- deletedbiblio=>{ 'abstract' => 'text' }, biblioitems=>{ 'lccn' => 'char(25)', + 'url' => 'varchar(255)', 'marc' => 'text' }, deletedbiblioitems=>{ 'lccn' => 'char(25)', + 'url' => 'varchar(255)', 'marc' => 'text' }, branchtransfers=>{ 'datearrived' => 'datetime' }, From amillar at users.sourceforge.net Sun Jun 9 07:28:28 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Sat, 08 Jun 2002 22:28:28 -0700 Subject: [Koha-cvs] CVS: koha/C4 Acquisitions.pm,1.5.2.8,1.5.2.9 Message-ID: Update of /cvsroot/koha/koha/C4 In directory usw-pr-cvs1:/tmp/cvs-serv15534/C4 Modified Files: Tag: rel-1-2 Acquisitions.pm Log Message: Sync biblioitems fields between acqui, acqui.simple, and updatedatabase Index: Acquisitions.pm =================================================================== RCS file: /cvsroot/koha/koha/C4/Acquisitions.pm,v retrieving revision 1.5.2.8 retrieving revision 1.5.2.9 diff -C2 -r1.5.2.8 -r1.5.2.9 *** Acquisitions.pm 31 May 2002 05:30:48 -0000 1.5.2.8 --- Acquisitions.pm 9 Jun 2002 05:28:25 -0000 1.5.2.9 *************** *** 592,653 **** my ($biblioitem) = @_; my $dbh = C4Connect; - my $query = "Select max(biblioitemnumber) from biblioitems"; - my $sth = $dbh->prepare($query); my $data; my $bibitemnum; ! $biblioitem->{'volume'} = $dbh->quote($biblioitem->{'volume'}); ! $biblioitem->{'number'} = $dbh->quote($biblioitem->{'number'}); ! $biblioitem->{'classification'} = $dbh->quote($biblioitem->{'classification'}); ! $biblioitem->{'itemtype'} = $dbh->quote($biblioitem->{'itemtype'}); ! $biblioitem->{'url'} = $dbh->quote($biblioitem->{'url'}); ! $biblioitem->{'isbn'} = $dbh->quote($biblioitem->{'isbn'}); ! $biblioitem->{'issn'} = $dbh->quote($biblioitem->{'issn'}); ! $biblioitem->{'dewey'} = $dbh->quote($biblioitem->{'dewey'}); ! $biblioitem->{'subclass'} = $dbh->quote($biblioitem->{'subclass'}); ! $biblioitem->{'publicationyear'} = $dbh->quote($biblioitem->{'publicationyear'}); ! $biblioitem->{'publishercode'} = $dbh->quote($biblioitem->{'publishercode'}); ! $biblioitem->{'volumedate'} = $dbh->quote($biblioitem->{'volumedate'}); ! $biblioitem->{'volumeddesc'} = $dbh->quote($biblioitem->{'volumeddesc'}); $biblioitem->{'illus'} = $dbh->quote($biblioitem->{'illus'}); ! $biblioitem->{'pages'} = $dbh->quote($biblioitem->{'pages'}); ! $biblioitem->{'notes'} = $dbh->quote($biblioitem->{'notes'}); ! $biblioitem->{'size'} = $dbh->quote($biblioitem->{'size'}); ! $biblioitem->{'place'} = $dbh->quote($biblioitem->{'place'}); ! $sth->execute; $data = $sth->fetchrow_arrayref; $bibitemnum = $$data[0] + 1; - $sth->finish; $query = "insert into biblioitems set ! biblioitemnumber = $bibitemnum, ! biblionumber = $biblioitem->{'biblionumber'}, ! volume = $biblioitem->{'volume'}, ! number = $biblioitem->{'number'}, ! classification = $biblioitem->{'classification'}, ! itemtype = $biblioitem->{'itemtype'}, ! url = $biblioitem->{'url'}, ! isbn = $biblioitem->{'isbn'}, ! issn = $biblioitem->{'issn'}, ! dewey = $biblioitem->{'dewey'}, ! subclass = $biblioitem->{'subclass'}, ! publicationyear = $biblioitem->{'publicationyear'}, ! publishercode = $biblioitem->{'publishercode'}, ! volumedate = $biblioitem->{'volumedate'}, ! volumeddesc = $biblioitem->{'volumeddesc'}, ! illus = $biblioitem->{'illus'}, ! pages = $biblioitem->{'pages'}, ! notes = $biblioitem->{'notes'}, ! size = $biblioitem->{'size'}, ! place = $biblioitem->{'place'}"; $sth = $dbh->prepare($query); ! $sth->execute; $sth->finish; $dbh->disconnect; return($bibitemnum); ! } sub newsubject { --- 592,661 ---- my ($biblioitem) = @_; my $dbh = C4Connect; my $data; my $bibitemnum; + my $error; ! # Get next unused number ! my $query = "Select max(biblioitemnumber) from biblioitems"; ! my $sth = $dbh->prepare($query); $sth->execute; $data = $sth->fetchrow_arrayref; $bibitemnum = $$data[0] + 1; $sth->finish; $query = "insert into biblioitems set ! biblioitemnumber = ?, ! biblionumber = ?, ! volume = ?, ! number = ?, ! classification = ?, ! itemtype = ?, ! url = ?, ! isbn = ?, ! issn = ?, ! lccn = ?, ! dewey = ?, ! subclass = ?, ! publicationyear = ?, ! publishercode = ?, ! volumedate = ?, ! volumeddesc = ?, ! illus = ?, ! pages = ?, ! notes = ?, ! size = ?, ! marc = ?, ! place = ? "; $sth = $dbh->prepare($query); ! $sth->execute( ! $bibitemnum, ! $biblioitem->{'biblionumber'}, ! $biblioitem->{'volume'}, ! $biblioitem->{'number'}, ! $biblioitem->{'classification'}, ! $biblioitem->{'itemtype'}, ! $biblioitem->{'url'}, ! $biblioitem->{'isbn'}, ! $biblioitem->{'issn'}, ! $biblioitem->{'lccn'}, ! $biblioitem->{'dewey'}, ! $biblioitem->{'subclass'}, ! $biblioitem->{'publicationyear'}, ! $biblioitem->{'publishercode'}, ! $biblioitem->{'volumedate'}, ! $biblioitem->{'volumeddesc'}, ! $biblioitem->{'illus'}, ! $biblioitem->{'pages'}, ! $biblioitem->{'notes'}, ! $biblioitem->{'size'}, ! $biblioitem->{'marc'}, ! $biblioitem->{'place'}, ! ) or $error=$sth->errstr; $sth->finish; $dbh->disconnect; return($bibitemnum); ! } # sub newbiblioitem sub newsubject { From amillar at users.sourceforge.net Sun Jun 9 07:28:28 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Sat, 08 Jun 2002 22:28:28 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.14,1.6.2.15 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv15534/acqui.simple Modified Files: Tag: rel-1-2 marcimport.pl Log Message: Sync biblioitems fields between acqui, acqui.simple, and updatedatabase Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.14 retrieving revision 1.6.2.15 diff -C2 -r1.6.2.14 -r1.6.2.15 *** marcimport.pl 6 Jun 2002 19:18:01 -0000 1.6.2.14 --- marcimport.pl 9 Jun 2002 05:28:25 -0000 1.6.2.15 *************** *** 1402,1457 **** if ( ! $error ) { - # Get next biblioitemnumber - $sth=$dbh->prepare("select max(biblioitemnumber) from biblioitems"); - $sth->execute; - ($biblioitemnumber) = $sth->fetchrow; - $biblioitemnumber++; ! print "

    Next biblio item is $biblioitemnumber
    \n" if $debug; ! ! $sth=$dbh->prepare("insert into biblioitems ( ! biblioitemnumber, ! biblionumber, ! volume, ! number, ! itemtype, ! isbn, ! issn, ! dewey, ! subclass, ! publicationyear, ! publishercode, ! volumedate, ! volumeddesc, ! illus, ! pages, ! notes, ! size, ! place, ! lccn, ! marc) ! values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ); ! ! $sth->execute( ! $biblioitemnumber, ! $biblionumber, ! $biblioitem->{volume}, ! $biblioitem->{number}, ! $biblioitem->{itemtype}, ! $biblioitem->{isbn}, ! $biblioitem->{issn}, ! $biblioitem->{dewey}, ! $biblioitem->{subclass}, ! $biblioitem->{publicationyear}, ! $biblioitem->{publishercode}, ! $biblioitem->{volumedate}, ! $biblioitem->{volumeddesc}, ! $biblioitem->{illus}, ! $biblioitem->{pages}, ! $biblioitem->{notes}, ! $biblioitem->{size}, ! $biblioitem->{place}, ! $biblioitem->{lccn}, ! $biblioitem->{marc} ) or $error.=$sth->errstr ; $sth=$dbh->prepare("insert into bibliosubject --- 1402,1408 ---- if ( ! $error ) { ! $biblioitem->{biblionumber}=$biblionumber; ! $biblioitemnumber=newbiblioitem($biblioitem); $sth=$dbh->prepare("insert into bibliosubject From amillar at users.sourceforge.net Sun Jun 9 22:41:01 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Sun, 09 Jun 2002 13:41:01 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.15,1.6.2.16 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv12088 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: Minor cleanups and comments Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.15 retrieving revision 1.6.2.16 diff -C2 -r1.6.2.15 -r1.6.2.16 *** marcimport.pl 9 Jun 2002 05:28:25 -0000 1.6.2.15 --- marcimport.pl 9 Jun 2002 20:40:59 -0000 1.6.2.16 *************** *** 92,96 **** ['082', 'a', 'dewey', 0 ], ['100', 'a', 'author', 0 ], ! ['245', 'a', 'title', 0 ], ['245', 'b', 'subtitle', 0 ], ['260', 'a', 'place', 0, ':' ], --- 92,96 ---- ['082', 'a', 'dewey', 0 ], ['100', 'a', 'author', 0 ], ! ['245', 'a', 'title', 0, ':;' ], ['245', 'b', 'subtitle', 0 ], ['260', 'a', 'place', 0, ':' ], *************** *** 226,231 **** $bib, # hash ref to named fields $fieldlist, # list ref ! $lccn, $isbn, $issn, $dewey, $author, ! $place, $publisher, $publicationyear, $volume, $number, @subjects, $notes, $additionalauthors, $copyrightdate, $seriestitle, --- 226,231 ---- $bib, # hash ref to named fields $fieldlist, # list ref ! $lccn, $isbn, $issn, $dewey, ! $publisher, $publicationyear, $volume, $number, @subjects, $notes, $additionalauthors, $copyrightdate, $seriestitle, *************** *** 274,279 **** $isbn =$bib->{isbn}; $issn =$bib->{issn}; - $author =$bib->{author}; - $place =$bib->{place}; $publisher =$bib->{publisher}; $publicationyear =$bib->{publicationyear}; --- 274,277 ---- *************** *** 289,293 **** $marcinput=$input->hidden(-name=>'marc', -default=>$marc); $subtitleinput=$input->textfield(-name=>'subtitle', -default=>$bib->{subtitle}, -size=>40); ! $authorinput=$input->textfield(-name=>'author', -default=>$author); $illustratorinput=$input->textfield(-name=>'illustrator', -default=>$bib->{illustrator}); --- 287,291 ---- $marcinput=$input->hidden(-name=>'marc', -default=>$marc); $subtitleinput=$input->textfield(-name=>'subtitle', -default=>$bib->{subtitle}, -size=>40); ! $authorinput=$input->textfield(-name=>'author', -default=>$bib->{author}); $illustratorinput=$input->textfield(-name=>'illustrator', -default=>$bib->{illustrator}); *************** *** 315,324 **** $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn); $deweyinput=$input->textfield(-name=>'dewey', -default=>$bib->{dewey}); ! $cleanauthor=$author; $cleanauthor=~s/[^A-Za-z]//g; $subclassinput=$input->textfield(-name=>'subclass', -default=>uc(substr($cleanauthor,0,3))); $publisherinput=$input->textfield(-name=>'publishercode', -default=>$publisher); $pubyearinput=$input->textfield(-name=>'publicationyear', -default=>$publicationyear); ! $placeinput=$input->textfield(-name=>'place', -default=>$place); $pagesinput=$input->textfield(-name=>'pages', -default=>$bib->{pages}); $sizeinput=$input->textfield(-name=>'size', -default=>$bib->{size}); --- 313,322 ---- $isbninput=$input->textfield(-name=>'isbn', -default=>$isbn); $deweyinput=$input->textfield(-name=>'dewey', -default=>$bib->{dewey}); ! $cleanauthor=$bib->{author}; $cleanauthor=~s/[^A-Za-z]//g; $subclassinput=$input->textfield(-name=>'subclass', -default=>uc(substr($cleanauthor,0,3))); $publisherinput=$input->textfield(-name=>'publishercode', -default=>$publisher); $pubyearinput=$input->textfield(-name=>'publicationyear', -default=>$publicationyear); ! $placeinput=$input->textfield(-name=>'place', -default=>$bib->{place}); $pagesinput=$input->textfield(-name=>'pages', -default=>$bib->{pages}); $sizeinput=$input->textfield(-name=>'size', -default=>$bib->{size}); *************** *** 330,334 **** #print "
    getting itemtypeselect
    \n"; ! $itemtypeselect=&GetKeyTableSelectOptions( $dbh, 'itemtypes', 'itemtype', 'description', 1); #print "
    it=$itemtypeselect
    \n"; --- 328,332 ---- #print "
    getting itemtypeselect
    \n"; ! $itemtypeselect=&getkeytableselectoptions( $dbh, 'itemtypes', 'itemtype', 'description', 1); #print "
    it=$itemtypeselect
    \n"; *************** *** 418,423 **** --- 416,423 ---- # if z3950 results if ($file=~/Z-(\d+)/) { + # This is a z3950 search $recordsource=''; } else { + # This is a Marc upload my $sth=$dbh->prepare("select marc,name from uploadedmarc where id=$file"); $sth->execute; *************** *** 425,441 **** $recordsource="from $name"; } ! print << "EOF"; !
    !

    ! Select a New File !

    ! ! !
    ! Select a Record to Import $recordsource !
    EOF if ($file=~/Z-(\d+)/) { ! my $id=$1; my $sth=$dbh->prepare("select servers from z3950queue where id=$id"); $sth->execute; --- 425,445 ---- $recordsource="from $name"; } ! ! print << "EOF"; !
    !

    ! Select a New File !

    ! ! !
    ! Select a Record to Import $recordsource !
    EOF + if ($file=~/Z-(\d+)/) { ! # This is a z3950 search ! ! my $id=$1; # search results id number my $sth=$dbh->prepare("select servers from z3950queue where id=$id"); $sth->execute; *************** *** 495,500 **** } print "
      \n"; ! my $stj=$dbh->prepare("update z3950results set highestseen=".($startrecord+10)." where id=$resultsid"); ! $stj->execute; if ($sti->rows == 0) { print "pending..."; --- 499,506 ---- } print "
        \n"; ! my $stj=$dbh->prepare("update z3950results ! set highestseen=? where id=?"); ! $stj->execute($startrecord+10,$resultsid); ! if ($sti->rows == 0) { print "pending..."; *************** *** 533,537 **** print "
        It took $elapsed seconds to process this page.\n"; } else { ! my @records=parsemarcfileformat($data); foreach $record (@records) { --- 539,544 ---- print "
        It took $elapsed seconds to process this page.\n"; } else { ! # This is an uploaded Marc record ! my @records=parsemarcfileformat($data); foreach $record (@records) { *************** *** 603,606 **** --- 610,614 ---- # return my $bib; # pointer to hash of named output fields + # Example: $bib->{'author'} = "Twain, Mark"; my $debug=0; *************** *** 1262,1266 **** } ! my $branchselect=GetKeyTableSelectOptions( $dbh, 'branches', 'branchcode', 'branchname', 0); --- 1270,1274 ---- } ! my $branchselect=getkeytableselectoptions( $dbh, 'branches', 'branchcode', 'branchname', 0); *************** *** 1337,1341 **** # Create an HTML option list for a form tag by using # values from a DB file ! sub getkeytableselectoptions { use strict; # inputs *************** *** 1372,1376 **** } return $selectclause; ! } # sub GetKeyTableSelectOptions #--------------------------------- --- 1380,1384 ---- } return $selectclause; ! } # sub getkeytableselectoptions #--------------------------------- *************** *** 1529,1533 **** $sth->execute($query, $type, $serverlist, $requestid); } ! } # sub #-------------------------------------- --- 1537,1541 ---- $sth->execute($query, $type, $serverlist, $requestid); } ! } # sub addz3950queue #-------------------------------------- From amillar at users.sourceforge.net Mon Jun 10 08:47:19 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Sun, 09 Jun 2002 23:47:19 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.16,1.6.2.17 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv376 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: improved table-driven Marc mapping Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.16 retrieving revision 1.6.2.17 diff -C2 -r1.6.2.16 -r1.6.2.17 *** marcimport.pl 9 Jun 2002 20:40:59 -0000 1.6.2.16 --- marcimport.pl 10 Jun 2002 06:47:17 -0000 1.6.2.17 *************** *** 84,111 **** ); ! # tag, subfield, field name, repeats, stripchars ! my @tagmaplist=( ! ['010', 'a', 'lccn', 0 ], ! ['015', 'a', 'lccn', 0 ], ! ['020', 'a', 'isbn', 0 ], ! ['022', 'a', 'issn', 0 ], ! ['082', 'a', 'dewey', 0 ], ! ['100', 'a', 'author', 0 ], ! ['245', 'a', 'title', 0, ':;' ], ! ['245', 'b', 'subtitle', 0 ], ! ['260', 'a', 'place', 0, ':' ], ! ['260', 'b', 'publisher', 0, ':' ], ! ['260', 'c', 'year' , 0 ], ! ['300', 'a', 'pages', 0, ':;' ], ! ['300', 'c', 'size', 0 ], ! ['362', 'a', 'volume-number', 0 ], ! ['440', 'a', 'seriestitle', 0 ], ! ['440', 'v', 'series-volume-number', 0 ], ! ['700', 'a', 'addtional-author-illus', 1 ], ! ['5xx', 'a', 'notes', 1 ], ! ['65x', 'a', 'subject', 1, '.' ], ! ); ! my ( ! $tagmap, # hash ref of mappings ); --- 84,110 ---- ); ! # tag, subfield, field name, repeats, striptrailingchars ! my %tagmap=( ! '010'=>{'a'=>{name=> 'lccn', rpt=>0 }}, ! '015'=>{'a'=>{name=> 'lccn', rpt=>0 }}, ! '020'=>{'a'=>{name=> 'isbn', rpt=>0 }}, ! '022'=>{'a'=>{name=> 'issn', rpt=>0 }}, ! '082'=>{'a'=>{name=> 'dewey', rpt=>0 }}, ! '100'=>{'a'=>{name=> 'author', rpt=>0, striptrail=>',:;/-' }}, ! '245'=>{'a'=>{name=> 'title', rpt=>0, striptrail=>',:;/' }, ! 'b'=>{name=> 'subtitle', rpt=>0, striptrail=>',:;/' }}, ! '260'=>{'a'=>{name=> 'place', rpt=>0, striptrail=>',:;/-' }, ! 'b'=>{name=> 'publisher', rpt=>0, striptrail=>',:;/-' }, ! 'c'=>{name=> 'year' , rpt=>0, striptrail=>'.,:;/-' }}, ! '300'=>{'a'=>{name=> 'pages', rpt=>0, striptrail=>',:;/-' }, ! 'c'=>{name=> 'size', rpt=>0, striptrail=>',:;/-' }}, ! '362'=>{'a'=>{name=> 'volume-number', rpt=>0 }}, ! '440'=>{'a'=>{name=> 'seriestitle', rpt=>0, striptrail=>',:;/' }, ! 'v'=>{name=> 'volume-number',rpt=>0 }}, ! '490'=>{'a'=>{name=> 'seriestitle', rpt=>0, striptrail=>',:;/' }, ! 'v'=>{name=> 'volume-number',rpt=>0 }}, ! '700'=>{'a'=>{name=> 'addtional-author-illus',rpt=>1, striptrail=>',:;/' }}, ! '5xx'=>{'a'=>{name=> 'notes', rpt=>1 }}, ! '65x'=>{'a'=>{name=> 'subject', rpt=>1, striptrail=>'.,:;/-' }}, ); *************** *** 119,124 **** my $dbh=C4Connect; - $tagmap=BuildTagMap(@tagmaplist); - #------------- # Display output --- 118,121 ---- *************** *** 615,626 **** my ( ! $field, $value, ); ! my ($lccn, $isbn, $issn, $dewey, $author, $title, $place, ! $publisher, $publicationyear, $volume, $number, @subjects, $subject, ! $size, $pages, $controlnumber, $subtitle, $notes, $additionalauthors, $illustrator, $copyrightdate, $s, $subdivision, $subjectsubfield, ! $seriestitle); print "
        \n" if $debug;
        --- 612,628 ----
          
              my (
        ! 	$field, 	# hash ref
        ! 	$value, 
        ! 	$subfield,	# Marc subfield [a-z]
        ! 	$fieldname,	# name of field "author", "title", etc.
        ! 	$strip,		# chars to remove from end of field
        ! 	$stripregex,	# reg exp pattern
              );
        !     my ($lccn, $isbn, $issn,    
        ! 	$publicationyear, @subjects, $subject,
        ! 	$controlnumber, 
          	$notes, $additionalauthors, $illustrator, $copyrightdate, 
          	$s, $subdivision, $subjectsubfield,
        !     );
          
              print "
        \n" if $debug;
        ***************
        *** 628,639 ****
              if ( ref($record) eq "ARRAY" ) {
                  foreach $field (@$record) {
          	    if ($field->{'tag'} eq '001') {
          		$bib->{controlnumber}=$field->{'indicator'};
          	    }
        - 	    if ($field->{'tag'} eq '010') {
        - 		$bib->{lccn}=$field->{'subfields'}->{'a'};
        - 		$bib->{lccn}=~s/^\s*//;
        - 		($bib->{lccn}) = (split(/\s+/, $bib->{lccn}))[0];
        - 	    }
          	    if ($field->{'tag'} eq '015') {
          		$bib->{lccn}=$field->{'subfields'}->{'a'};
        --- 630,660 ----
              if ( ref($record) eq "ARRAY" ) {
                  foreach $field (@$record) {
        + 
        + 	    # Check each subfield in field
        + 	    foreach $subfield ( keys %{$field->{subfields}} ) {
        + 		# see if it is defined in our Marc to koha mapping table
        + 	    	if ( $fieldname=$tagmap{ $field->{'tag'} }->{$subfield}->{name} ) {
        + 		    # Yes, so keep the value
        + 		    $bib->{$fieldname}=$field->{'subfields'}->{$subfield};
        + 		    # if it was an array, just keep first element.
        + 		    if (ref($bib->{$fieldname}) eq 'ARRAY') {
        + 			$bib->{$fieldname}=$$bib->{fieldname}[0]
        + 		    } # if array
        + 		    # see if this field should have trailing chars dropped
        + 	    	    if ($strip=$tagmap{ $field->{'tag'} }->{$subfield}->{striptrail} ) {
        + 			$strip=~s//\\/; # backquote each char
        + 			$stripregex='[ ' . $strip . ']+$';  # remove trailing spaces also
        + 			$bib->{$fieldname}=~s/$stripregex//;
        + 		    } # if strip
        + 		    print "Found subfield $field->{'tag'} $subfield " .
        + 			"$fieldname = $bib->{$fieldname}\n" if $debug;
        + 		} # if tagmap exists
        + 
        + 	    } # foreach subfield
        + 
        + 
          	    if ($field->{'tag'} eq '001') {
          		$bib->{controlnumber}=$field->{'indicator'};
          	    }
          	    if ($field->{'tag'} eq '015') {
          		$bib->{lccn}=$field->{'subfields'}->{'a'};
        ***************
        *** 642,679 ****
          		($bib->{lccn}) = (split(/\s+/, $bib->{lccn}))[0];
          	    }
        - 	    if ($field->{'tag'} eq '020') {
        - 		$bib->{isbn}=$field->{'subfields'}->{'a'};
        - 		if (ref($bib->{isbn}) eq 'ARRAY') {$bib->{isbn}=$$bib->{isbn}[0]};
        - 		$bib->{isbn}=~s/[^\d]*//g;
        - 	    }
        - 	    if ($field->{'tag'} eq '022') {
        - 		$bib->{issn}=$field->{'subfields'}->{'a'};
        - 		$bib->{issn}=~s/^\s*//;
        - 		($bib->{issn}) = (split(/\s+/, $bib->{issn}))[0];
        - 	    }
        - 	    if ($field->{'tag'} eq '100') {
        - 		$bib->{author}=$field->{'subfields'}->{'a'};
        - 	    }
        - 	    if ($field->{'tag'} eq '245') {
        - 		$bib->{title}=$field->{'subfields'}->{'a'};
        - 		$bib->{title}=~s/ \/$//;
        - 		$bib->{subtitle}=$field->{'subfields'}->{'b'};
        - 		$bib->{subtitle}=~s/ \/$//;
        - 	    }
          
          
        - 		if ($field->{'tag'} eq '082') {
        - 		    $dewey=$field->{'subfields'}->{'a'};
        - 		    if (ref($dewey) eq 'ARRAY') { $dewey=$$dewey[0]; }
        - 		    $dewey=~s/\///g;
        - 		}
          		if ($field->{'tag'} eq '260') {
        - 		    $place=$field->{'subfields'}->{'a'};
        - 		    if (ref($place) eq 'ARRAY') { $place=$$place[0]; }
        - 		    $place=~s/\s*:$//g;
        - 
        - 		    $publisher=$field->{'subfields'}->{'b'};
        - 		    if (ref($publisher) eq 'ARRAY') { $publisher=$$publisher[0]; }
        - 		    $publisher=~s/\s*:$//g;
          
          		    $publicationyear=$field->{'subfields'}->{'c'};
        --- 663,669 ----
        ***************
        *** 690,713 ****
          		    }
          		}
        - 		if ($field->{'tag'} eq '300') {
        - 		    $pages=$field->{'subfields'}->{'a'};
        - 		    $pages=~s/ \;$//;
        - 		    $size=$field->{'subfields'}->{'c'};
        - 		    $pages=~s/\s*:$//g;
        - 		    $size=~s/\s*:$//g;
        - 		}
        - 		if ($field->{'tag'} eq '362') {
        - 		    if ($field->{'subfields'}->{'a'}=~/(\d+).*(\d+)/) {
        - 			$volume=$1;
        - 			$number=$2;
        - 		    }
        - 		}
        - 		if ($field->{'tag'} eq '440') {
        - 		    $seriestitle=$field->{'subfields'}->{'a'};
        - 		    if ($field->{'subfields'}->{'v'}=~/(\d+).*(\d+)/) {
        - 			$volume=$1;
        - 			$number=$2;
        - 		    }
        - 		}
          		if ($field->{'tag'} eq '700') {
          		    my $name=$field->{'subfields'}->{'a'};
        --- 680,683 ----
        ***************
        *** 741,763 ****
          		    print "Subject=$subject\n" if $debug;
          		    push @subjects, $subject;
        ! 		}
        ! 
        ! 		($dewey			) && ($bib->{dewey}=$dewey );
        ! 		($place			) && ($bib->{place}=$place  );
        ! 		($publisher		) && ($bib->{publisher}=$publisher  );
        ! 		($publicationyear	) && ($bib->{publicationyear}=$publicationyear  );
        ! 		($copyrightdate		) && ($bib->{copyrightdate}=$copyrightdate  );
        ! 		($pages			) && ($bib->{pages}=$pages  );
        ! 		($size			) && ($bib->{size}=$size  );
        ! 		($volume		) && ($bib->{volume}=$volume  );
        ! 		($number		) && ($bib->{number}=$number  );
        ! 		($seriestitle		) && ($bib->{seriestitle}=$seriestitle  );
        ! 		($additionalauthors	) && ($bib->{additionalauthors}=$additionalauthors  );
        ! 		($illustrator		) && ($bib->{illustrator}=$illustrator  );
        ! 		($notes			) && ($bib->{notes}=$notes  );
        ! 		($#subjects		) && ($bib->{subject}=\@subjects  );
          
          
                  } # foreach field
              } else {
          	print "Error: extractmarcfields: input ref $record is " .
        --- 711,745 ----
          		    print "Subject=$subject\n" if $debug;
          		    push @subjects, $subject;
        ! 		} # if tag 65x
          
          
                  } # foreach field
        + 	($publicationyear	) && ($bib->{publicationyear}=$publicationyear  );
        + 	($copyrightdate		) && ($bib->{copyrightdate}=$copyrightdate  );
        + 	($additionalauthors	) && ($bib->{additionalauthors}=$additionalauthors  );
        + 	($illustrator		) && ($bib->{illustrator}=$illustrator  );
        + 	($notes			) && ($bib->{notes}=$notes  );
        + 	($#subjects		) && ($bib->{subject}=\@subjects  );
        + 
        + 	# Misc cleanup
        + 	$bib->{dewey}=~s/\///g;	# drop any slashes
        + 
        + 	($bib->{lccn}) = (split(/\s+/, $bib->{lccn}))[0]; # only keep first word
        + 
        + 	$bib->{isbn}=~s/[^\d]*//g;	# drop non-digits
        + 
        + 	$bib->{issn}=~s/^\s*//;
        + 	($bib->{issn}) = (split(/\s+/, $bib->{issn}))[0];
        + 
        + 	if ( $bib->{'volume-number'} ) {
        + 	    if ($bib->{'volume-number'}=~/(\d+).*(\d+)/ ) {
        + 		$bib->{'volume'}=$1;
        + 		$bib->{'number'}=$2;
        + 	    } else {
        + 		$bib->{volume}=$bib->{'volume-number'};
        + 	    }
        + 	    delete $bib->{'volume-number'};
        + 	} # if volume-number
        + 
              } else {
          	print "Error: extractmarcfields: input ref $record is " .
        ***************
        *** 1573,1597 ****
          } # sub checkvalidisbn
          
        - #-------------------------
        - sub BuildTagMap {
        -     use strict;
        - 
        -     my (@tagmaplist)=@_;	# input
        -     my ($tagmap);		#return
        - 
        -     my (
        - 	$row,
        -     	$tagnum, $subfield, $fieldname, $repeat, $stripchars,
        -     );
        - 
        -     foreach $row (@tagmaplist) {
        -     	($tagnum, $subfield, $fieldname, $repeat, $stripchars)= @$row;
        - 	#print "tagnum=$tagnum name=$fieldname\n";
        - 	$tagmap->{$tagnum}{$subfield}{fieldname}=$fieldname;
        - 	$tagmap->{$tagnum}{$subfield}{repeat}=$repeat;
        - 	$tagmap->{$tagnum}{$subfield}{stripchars}=$stripchars;
        -     } # foreach row
        -     return $tagmap;
        - } # sub BuildTagMap
          #-------------------------
          sub FormatMarcText {
        --- 1555,1558 ----
        
        
        
        
        From tipaul at users.sourceforge.net  Mon Jun 10 22:49:56 2002
        From: tipaul at users.sourceforge.net (Paul POULAIN)
        Date: Mon, 10 Jun 2002 13:49:56 -0700
        Subject: [Koha-cvs] CVS: koha/C4 Catalogue.pm,1.17,1.18 test.pl,1.2,1.3
        Message-ID: 
        
        Update of /cvsroot/koha/koha/C4
        In directory usw-pr-cvs1:/tmp/cvs-serv20255
        
        Modified Files:
        	Catalogue.pm test.pl 
        Log Message:
        MARC stuff : beginning to use MARC::Record package.
        
        
        Index: Catalogue.pm
        ===================================================================
        RCS file: /cvsroot/koha/koha/C4/Catalogue.pm,v
        retrieving revision 1.17
        retrieving revision 1.18
        diff -C2 -r1.17 -r1.18
        *** Catalogue.pm	6 Jun 2002 16:23:37 -0000	1.17
        --- Catalogue.pm	10 Jun 2002 20:49:54 -0000	1.18
        ***************
        *** 13,16 ****
        --- 13,17 ----
          require Exporter;
          use C4::Database;
        + use MARC::Record;
          
          use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
        ***************
        *** 21,27 ****
          @ISA = qw(Exporter);
          @EXPORT = qw(&newBiblio &newBiblioItem &newItem &updateBiblio &updateBiblioItem
        ! 	     &updateItem &changeSubfield &addSubfield &findSubfield 
        ! 	     &addMarcBiblio &nextsubfieldid
        ! 
          	     &getorders &bookseller &breakdown &basket &newbasket &bookfunds
          	     &ordersearch &newbiblio &newbiblioitem &newsubject &newsubtitle &neworder
        --- 22,26 ----
          @ISA = qw(Exporter);
          @EXPORT = qw(&newBiblio &newBiblioItem &newItem &updateBiblio &updateBiblioItem
        ! 	     &updateItem 
          	     &getorders &bookseller &breakdown &basket &newbasket &bookfunds
          	     &ordersearch &newbiblio &newbiblioitem &newsubject &newsubtitle &neworder
        ***************
        *** 34,38 ****
          	     &getbiblioitembybiblionumber
          	     &getbiblioitem &getitemsbybiblioitem &isbnsearch
        ! 	     &websitesearch &addwebsite &updatewebsite &deletewebsite);
          %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
          
        --- 33,41 ----
          	     &getbiblioitembybiblionumber
          	     &getbiblioitem &getitemsbybiblioitem &isbnsearch
        ! 	     &websitesearch &addwebsite &updatewebsite &deletewebsite
        ! 
        ! 	     &MARCchangeSubfield &MARCaddSubfield &MARCfindSubfield 
        ! 	     &MARCaddMarcBiblio &MARCnextsubfieldid &MARCkoha2marc
        ! );
          %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
          
        ***************
        *** 119,127 ****
          
          
        ! sub changeSubfield {
          # Subroutine changes a subfield value given a subfieldid.
              my ( $subfieldid, $subfieldvalue )=@_;
          
        !     my $dbh=&C4Connect;
              $dbh->do("lock tables marc_blob_subfield WRITE,marc_subfield_table WRITE");
              my $sth1=$dbh->prepare("select valuebloblink from marc_subfield_table where subfieldid=?");
        --- 122,130 ----
          
          
        ! sub MARCchangeSubfield {
          # Subroutine changes a subfield value given a subfieldid.
              my ( $subfieldid, $subfieldvalue )=@_;
          
        ! #    my $dbh=&C4Connect;
              $dbh->do("lock tables marc_blob_subfield WRITE,marc_subfield_table WRITE");
              my $sth1=$dbh->prepare("select valuebloblink from marc_subfield_table where subfieldid=?");
        ***************
        *** 156,165 ****
          }
          
        ! sub findSubfield {
              my ($bibid,$tag,$subfieldcode,$subfieldvalue,$subfieldorder) = @_;
              my $resultcounter=0;
              my $subfieldid;
              my $lastsubfieldid;
        !     my $dbh=&C4Connect;
              my $query="select subfieldid from marc_subfield_table where bibid=? and tag=? and subfieldcode=?";
              if ($subfieldvalue) {
        --- 159,169 ----
          }
          
        ! sub MARCfindSubfield {
        ! # returns a subfields number given a bibid/tad/subfield values
              my ($bibid,$tag,$subfieldcode,$subfieldvalue,$subfieldorder) = @_;
              my $resultcounter=0;
              my $subfieldid;
              my $lastsubfieldid;
        ! #    my $dbh=&C4Connect;
              my $query="select subfieldid from marc_subfield_table where bibid=? and tag=? and subfieldcode=?";
              if ($subfieldvalue) {
        ***************
        *** 186,193 ****
          }
          
        ! sub addSubfield {
        ! # Add a new subfield to a tag.
              my $bibid=shift;
              my $tagid=shift;
              my $tagorder=shift;
              my $subfieldcode=shift;
        --- 190,198 ----
          }
          
        ! sub MARCaddSubfield {
        ! # Add a new subfield to a tag into the DB.
              my $bibid=shift;
              my $tagid=shift;
        +     my $indicator=shift;
              my $tagorder=shift;
              my $subfieldcode=shift;
        ***************
        *** 195,201 ****
              my $subfieldvalue=shift;
          
        !     my $dbh=&C4Connect;
              unless ($subfieldorder) {
        ! 	my $sth=$dbh->prepare("select max(subfieldorder) from marc_subfield_table where tagid=$tagid");
          	$sth->execute;
          	if ($sth->rows) {
        --- 200,206 ----
              my $subfieldvalue=shift;
          
        ! #    my $dbh=&C4Connect;
              unless ($subfieldorder) {
        ! 	my $sth=$dbh->prepare("select max(subfieldorder) from marc_subfield_table where tag=$tagid");
          	$sth->execute;
          	if ($sth->rows) {
        ***************
        *** 213,217 ****
          	$sth->execute;
          	my ($res)=$sth->fetchrow;
        ! 	my $sth=$dbh->prepare("insert into marc_subfield_table (bibid,tagid,tagorder,subfieldcode,subfieldorder,valuebloblink) values (?,?,?,?,?,?)");
          	$sth->execute($bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$res);
          	$dbh->do("unlock tables");
        --- 218,222 ----
          	$sth->execute;
          	my ($res)=$sth->fetchrow;
        ! 	my $sth=$dbh->prepare("insert into marc_subfield_table (bibid,tag,tagorder,subfieldcode,subfieldorder,valuebloblink) values (?,?,?,?,?,?)");
          	$sth->execute($bibid,$tagid,$tagorder,$subfieldcode,$subfieldorder,$res);
          	$dbh->do("unlock tables");
        ***************
        *** 222,264 ****
          }
          
        ! sub addMarcBiblio {
        ! # pass the marcperlstructure to this function, and it will create the records in the marc tables
        !     my ($marcstructure) = @_;
        !     my $dbh=C4Connect;
        !     my $tag;
        !     my $tagorder;
        !     my $subfield;
        !     my $subfieldorder;
              # adding main table, and retrieving bibid
              $dbh->do("lock tables marc_biblio WRITE");
        !     my $sth=$dbh->prepare("insert into marc_biblio (datecreated,origincode) values (now(),?)");
        !     $sth->execute($marcstructure->{origincode});
              $sth=$dbh->prepare("select max(bibid) from marc_biblio");
              $sth->execute;
        !     ($marcstructure->{bibid})=$sth->fetchrow;
        !     print "BIBID :::".$marcstructure->{bibid}."\n";
              $sth->finish;
              $dbh->do("unlock tables");
              # now, add subfields...
        !     foreach $tag (keys %{$marcstructure->{tags}}) {
        ! 	foreach $tagorder (keys %{$marcstructure->{tags}->{$tag}}) { 
        ! 	    foreach $subfield (keys %{$marcstructure->{tags}->{$tag}->{$tagorder}->{subfields}}) {
        ! 		foreach $subfieldorder (keys %{$marcstructure->{tags}->{$tag}->{$tagorder}->{subfields}->{$subfield}}) {
        ! 		    &addSubfield($marcstructure->{bibid},
        ! 				 $tag,
        ! 				 $tagorder,
        ! 				 $subfield,
        ! 				 $subfieldorder,
        ! 				 $marcstructure->{tags}->{$tag}->{$tagorder}->{subfields}->{$subfield}->{$subfieldorder}
          				 );
        - #		    print "$tag / $tagorder / $subfield / $subfieldorder / ".$marcstructure->{tags}->{$tag}->{$tagorder}->{subfields}->{$subfield}->{$subfieldorder}."\n";
        - 		}
        - 	    }
          	}
              }
          }
          
        ! sub buildPerlmarcstructure {
        ! # this function builds perlmarcstructure from the old koha-DB fields
              my ($biblionumber,$author,$title,$unititle,$notes,$abstract,
          	$serial,$seriestitle,$copyrightdate,$biblioitemnumber,$volume,$number,
        --- 227,267 ----
          }
          
        ! sub MARCaddMarcBiblio {
        ! # pass the MARC::Record to this function, and it will create the records in the marc tables
        !     my ($record) = @_;
        !     my @fields=$record->fields();
        ! #    my $dbh=C4Connect;
        !     my $bibid;
              # adding main table, and retrieving bibid
              $dbh->do("lock tables marc_biblio WRITE");
        !     my $sth=$dbh->prepare("insert into marc_biblio (datecreated) values (now())");
        !     $sth->execute;
              $sth=$dbh->prepare("select max(bibid) from marc_biblio");
              $sth->execute;
        !     ($bibid)=$sth->fetchrow;
        ! #    print "BIBID :::".$marcstructure->{bibid}."\n";
              $sth->finish;
              $dbh->do("unlock tables");
        +     my $fieldcount=0;
              # now, add subfields...
        !     foreach my $field (@fields) {
        ! 	my @subfields=$field->subfields();
        ! 	$fieldcount++;
        ! 	foreach my $subfieldcount (0..$#subfields) {
        ! 	    print $field->tag().":".$field->indicator(1).$field->indicator(2).":".$subfields[$subfieldcount][0].":".$subfields[$subfieldcount][1]."\n";
        ! 		    &MARCaddSubfield($bibid,
        ! 				 $field->tag(),
        ! 				 $field->indicator(1).$field->indicator(2),
        ! 				 $fieldcount,
        ! 				 $subfields[$subfieldcount][0],
        ! 				 $subfieldcount,
        ! 				 $subfields[$subfieldcount][1]
          				 );
          	}
              }
          }
          
        ! sub MARCkoha2marc {
        ! # this function builds MARC::Record from the old koha-DB fields
              my ($biblionumber,$author,$title,$unititle,$notes,$abstract,
          	$serial,$seriestitle,$copyrightdate,$biblioitemnumber,$volume,$number,
        ***************
        *** 268,297 ****
          	$size,$place,$lccn) = @_;
          
        !     my $tagfield;
        !     my $tagsubfield;
        !     my $perlmarcstructure={};
        !     my $i=0;
        !     my $dbh=&C4Connect;
              my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?");
        !     $sth->execute("biblionumber");
        !     if (($tagfield,$tagsubfield)=$sth->fetchrow) {
        ! 	$i=nextsubfieldid($perlmarcstructure->{tags}->{$tagfield}->{1}->{subfields}->{$tagsubfield});
        ! 	$perlmarcstructure->{tags}->{$i}->{tag}=$tagfield;
        ! 	$perlmarcstructure->{tags}->{$i}->{tagorder}=1;
        ! 	$perlmarcstructure->{tags}->{$i}->{indicator}='##';
        !     }
          }
          
        ! sub nextsubfieldid {
        !     my $subfieldhash=shift;
        !     my $maxsubfieldnumber=0;
        !     my $subfield;
        !     my $number;
        !     foreach $subfield (keys %$subfieldhash) {
        ! 	foreach $number (keys %{$subfieldhash->{$subfield}}) {
        ! 	    ($number>$maxsubfieldnumber) && ($maxsubfieldnumber=$number);
          	}
              }
        !     return $maxsubfieldnumber+1;
          }
          
        --- 271,326 ----
          	$size,$place,$lccn) = @_;
          
        !     my $record = MARC::Record->new();
        ! #    my $dbh=&C4Connect;
              my $sth=$dbh->prepare("select tagfield,tagsubfield from marc_subfield_structure where kohafield=?");
        !     &MARCkoha2marcOnefield($sth,$record,"biblio.author",$author);
        !     &MARCkoha2marcOnefield($sth,$record,"biblio.title",$title);
        !     &MARCkoha2marcOnefield($sth,$record,"biblio.unititle",$unititle);
        !     &MARCkoha2marcOnefield($sth,$record,"biblio.notes",$notes);
        !     &MARCkoha2marcOnefield($sth,$record,"biblio.abstract",$abstract);
        !     &MARCkoha2marcOnefield($sth,$record,"biblio.serial",$serial);
        !     &MARCkoha2marcOnefield($sth,$record,"biblio.seriestitle",$seriestitle);
        !     &MARCkoha2marcOnefield($sth,$record,"biblio.copyrightdate",$copyrightdate);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.biblionumber",$biblionumber);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.biblioitemnumber",$biblioitemnumber);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.volume",$volume);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.number",$number);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.classification",$classification);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.itemtype",$itemtype);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.isbn",$isbn);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.issn",$issn);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.dewey",$dewey);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.subclass",$subclass);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.publicationyear",$publicationyear);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.publishercode",$publishercode);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.volumedate",$volumedate);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.illus",$illus);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.pages",$pages);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.notes",$notes);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.size",$size);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.place",$place);
        !     &MARCkoha2marcOnefield($sth,$record,"biblioitems.lccn",$lccn);
        !     print "RECORD : ".$record->as_formatted()."\n";
        !     return $record;
          }
          
        ! sub MARCkoha2marcOnefield {
        !     my ($sth,$record,$kohafieldname,$value)=@_;
        !     my $tagfield;
        !     my $tagsubfield;
        !     $sth->execute($kohafieldname);
        !     if (($tagfield,$tagsubfield)=$sth->fetchrow) {
        ! 	if ($record->field($tagfield)) {
        ! 	    my $tag =$record->field($tagfield);
        ! 	    if ($tag) {
        ! 		$tag->add_subfields($tagsubfield,$value);
        ! 		$record->delete_field($tag);
        ! 		$record->add_fields($tag);
        ! 	    }
        ! 	} else {
        ! 	    $record->add_fields($tagfield," "," ",$tagsubfield => $value);
          	}
              }
        !     return $record;
          }
          
        ***************
        *** 514,566 ****
          	print STDERR "MARC: $type $Record_ID $tag $mark $subfield_ID $original $new\n";
              }
        - }
        - 
        - sub addTag {
        - # Subroutine to add a tag to an existing MARC Record.  If a new linkage id is
        - # desired, set $env->{'linkage'} to 1.  If an existing linkage id should be
        - # set, set $env->{'linkid'} to the link number.
        -     my ($env, $Record_ID, $tag, $Indicator1, $Indicator2, $subfields) = @_;
        -     my $dbh=&C4Connect;  
        -     ($Indicator1) || ($Indicator1=' ');
        -     ($Indicator2) || ($Indicator2=' ');
        -     my $firstdigit=substr($tag,0,1);
        -     my $Subfield_ID;
        -     foreach (sort keys %$subfields) {
        - 	my $Subfield_Mark=$subfields->{$_}->{'Subfield_Mark'};
        - 	my $Subfield_Value=$subfields->{$_}->{'Subfield_Value'};
        - 	my $q_Subfield_Value=$dbh->quote($Subfield_Value);
        - 	if ($Subfield_ID) {
        - 	    my $sth=$dbh->prepare("insert into $firstdigit\XX_Subfield_Table (Subfield_ID, Subfield_Mark, Subfield_Value) values ($Subfield_ID, '$Subfield_Mark', $q_Subfield_Value)");
        - 	    $sth->execute;
        - 	} else {
        - 	    my $sth=$dbh->prepare("insert into $firstdigit\XX_Subfield_Table (Subfield_Mark, Subfield_Value) values ('$Subfield_Mark', $q_Subfield_Value)");
        - 	    $sth->execute;
        - 	    my $Subfield_Key=$dbh->{'mysql_insertid'};
        - 	    $Subfield_ID=$Subfield_Key;
        - 	    $sth=$dbh->prepare("update $firstdigit\XX_Subfield_Table set Subfield_ID=$Subfield_ID where Subfield_Key=$Subfield_Key");
        - 	    $sth->execute;
        - 	}
        -     }
        -     if (my $linkid=$env->{'linkid'}) {
        - 	$env->{'linkage'}=0;
        - 	my $sth=$dbh->prepare("insert into $firstdigit\XX_Subfield_Table (Subfield_ID, Subfield_Mark, Subfield_Value) values ($Subfield_ID, '8', '$linkid')");
        - 	$sth->execute;
        -     }
        -     my $sth=$dbh->prepare("insert into $firstdigit\XX_Tag_Table (Indicator1, Indicator2, Tag, Subfield_ID) values ('$Indicator1', '$Indicator2', '$tag', $Subfield_ID)");
        -     $sth->execute;
        -     my $Tag_Key=$dbh->{'mysql_insertid'};
        -     my $Tag_ID=$Tag_Key;
        -     $sth=$dbh->prepare("update $firstdigit\XX_Tag_Table set Tag_ID=$Tag_ID where Tag_Key=$Tag_Key");
        -     $sth->execute;
        -     $sth=$dbh->prepare("insert into Bib_Table (Record_ID, Tag_$firstdigit\XX_ID) values ($Record_ID, $Tag_ID)");
        -     $sth->execute;
        -     if ($env->{'linkage'}) {
        - 	my $sth=$dbh->prepare("insert into $firstdigit\XX_Subfield_Table (Subfield_ID, Subfield_Mark, Subfield_Value) values ($Subfield_ID, '8', '$Tag_ID')");
        - 	$sth->execute;
        - 	
        -     }
        -     $sth->finish;
        -     $dbh->disconnect;
        -     return ($env, $Tag_ID);
          }
          
        --- 543,546 ----
        
        Index: test.pl
        ===================================================================
        RCS file: /cvsroot/koha/koha/C4/test.pl,v
        retrieving revision 1.2
        retrieving revision 1.3
        diff -C2 -r1.2 -r1.3
        *** test.pl	6 Jun 2002 16:23:36 -0000	1.2
        --- test.pl	10 Jun 2002 20:49:54 -0000	1.3
        ***************
        *** 1,3 ****
        ! #!/usr/bin/perl
          use strict;
          require Exporter;
        --- 1,3 ----
        ! package C4::test;
          use strict;
          require Exporter;
        ***************
        *** 5,39 ****
          use C4::Catalogue;
          
        ! my $dbh=&C4Connect;
          $dbh->do("delete from marc_subfield_table");
          $dbh->do("delete from marc_blob_subfield");
        ! &addSubfield(1,'001','a',1,'1 - This is a value');
        ! &addSubfield(1,'001','b',1,'2 - This is another value');
        ! &addSubfield(1,'001','c',1,"3 - This is a value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff");
        ! &addSubfield(1,'001','d',1,"4 - This is another value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff");
          print "change 1\n";
        ! &changeSubfield(1,"1new - this is a changed value");
          print "change 2\n";
        ! &changeSubfield(2,"2new - go from short to long subfield... uuuuuuuuuuuuuuuuuuuuuuuu yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy tttttttttttttttttttttttttttttttt rrrrrrrrrrrrrrrrrrrrrr eeeeeeeeeeeeeeeeeeeeeeeee zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq ssssssssssssssssssssssssss ddddddddddddddddddddddddddddddd fffffffffffffffffffffffff ggggggggggggggggggggggggg hhhhhhhhhhhhhhhhhhhhhhhhhh jjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkk");
          print "change 3\n";
        ! &changeSubfield(3,"3new - go from long to short subfield...");
          print "change 4\n";
        ! &changeSubfield(4,"4new - stay with blob subfield...uuuuuuuuuuuuuuuuuuuuuuuu yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy tttttttttttttttttttttttttttttttt rrrrrrrrrrrrrrrrrrrrrr eeeeeeeeeeeeeeeeeeeeeeeee zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq ssssssssssssssssssssssssss ddddddddddddddddddddddddddddddd fffffffffffffffffffffffff ggggggggggggggggggggggggg hhhhhhhhhhhhhhhhhhhhhhhhhh jjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkk");
        ! my $x= &findSubfield(1,'001','a','',1);
        ! print "subfieldid : $x\n";
        ! my $record={};
        ! #$marcstru->{bibid}=58973; # calculated auto_increment in addMarcBiblio
        ! $record->{bibid}=58973;
        ! $record->{tags}->{110}->{1}->{indicator}='##';
        ! $record->{tags}->{110}->{1}->{subfields}->{a}->{1}='first text';
        ! $record->{tags}->{110}->{1}->{subfields}->{a}->{2}='second text';
        ! $record->{tags}->{110}->{1}->{subfields}->{b}->{3}='third text';
          
        ! $record->{tags}->{120}->{1}->{indicator}='##';
        ! $record->{tags}->{120}->{1}->{subfields}->{a}->{1}='last text ??';
        ! 
        ! $record->{tags}->{120}->{2}->{indicator}='01';
        ! $record->{tags}->{120}->{2}->{subfields}->{n}->{1}='no, another text';
        ! print "NEXT IS : ".nextsubfieldid($record->{tags}->{110}->{1}->{subfields})."\n";
        ! 
        ! &addMarcBiblio($record);
        --- 5,43 ----
          use C4::Catalogue;
          
        ! our $dbh=&C4Connect;
          $dbh->do("delete from marc_subfield_table");
          $dbh->do("delete from marc_blob_subfield");
        ! &MARCaddSubfield(1,'001',1,'##','a',1,'1 - This is a value');
        ! &MARCaddSubfield(1,'001',1,'##','b',1,'2 - This is another value');
        ! &MARCaddSubfield(1,'001',1,'##','c',1,"3 - This is a value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff");
        ! &MARCaddSubfield(1,'001',1,'##','d',1,"4 - This is another value very very long. I try to make it longer than 255 char. I need to add something else. will it be long enough now... I'm not sure. That's why i continue to add a few word to this very important sentence. Now I hope it will be enough... Oh, not it need some more characters. So i add stupid strings : xxxxxxxxxxxxxxx dddddddddddddddddddd eeeeeeeeeeeeeeeeeeeeeee rrrrrrrrrrrrrrrrrrr ffffffffffffffffff");
          print "change 1\n";
        ! &MARCchangeSubfield(1,"1new - this is a changed value");
          print "change 2\n";
        ! &MARCchangeSubfield(2,"2new - go from short to long subfield... uuuuuuuuuuuuuuuuuuuuuuuu yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy tttttttttttttttttttttttttttttttt rrrrrrrrrrrrrrrrrrrrrr eeeeeeeeeeeeeeeeeeeeeeeee zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq ssssssssssssssssssssssssss ddddddddddddddddddddddddddddddd fffffffffffffffffffffffff ggggggggggggggggggggggggg hhhhhhhhhhhhhhhhhhhhhhhhhh jjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkk");
          print "change 3\n";
        ! &MARCchangeSubfield(3,"3new - go from long to short subfield...");
          print "change 4\n";
        ! &MARCchangeSubfield(4,"4new - stay with blob subfield...uuuuuuuuuuuuuuuuuuuuuuuu yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy tttttttttttttttttttttttttttttttt rrrrrrrrrrrrrrrrrrrrrr eeeeeeeeeeeeeeeeeeeeeeeee zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq ssssssssssssssssssssssssss ddddddddddddddddddddddddddddddd fffffffffffffffffffffffff ggggggggggggggggggggggggg hhhhhhhhhhhhhhhhhhhhhhhhhh jjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkk");
        ! my $x= &MARCfindSubfield(1,'001','a','',1);
        ! my $record= MARC::Record->new();
        ! $record->leader("58973");
        ! $record->add_fields('100',1,'',a => 'Logan, Robert K.', d => '1000-');
        ! $record->add_fields('110',1,'',d => '1939-');
          
        ! my $record2=MARCkoha2marc("123456","author","title","unititle","notes","abstract",
        ! 	"serial","seriestitle","copyrightdate","biblioitemnumber","volume","number",
        ! 	"classification","itemtype","isbn","issn",
        ! 	"dewey","subclass","publicationyear","publishercode",
        ! 	"volumedate","illus","pages","notes",
        ! 	"size","place","lccn");
        ! &MARCaddMarcBiblio($record2);
        ! # parse all subfields 
        ! my @fields = $record->fields();
        ! foreach my $field (@fields) {
        !     my @subf=$field->subfields;
        !     for my $i (0..$#subf) {
        ! #    print $field->tag(), " ", $field->indicator(1),$field->indicator(2), "subf: ", $subf[$i][0]," =",$subf[$i][1]," <-- \n";
        ! }
        ! }
        ! #print $record->as_formatted();
        
        
        
        
        From amillar at users.sourceforge.net  Tue Jun 11 08:26:59 2002
        From: amillar at users.sourceforge.net (Alan Millar)
        Date: Mon, 10 Jun 2002 23:26:59 -0700
        Subject: [Koha-cvs] CVS: koha/acqui.simple z3950-daemon-launch.sh,NONE,1.1.2.1 z3950-daemon-shell.sh,NONE,1.1.2.1
        Message-ID: 
        
        Update of /cvsroot/koha/koha/acqui.simple
        In directory usw-pr-cvs1:/tmp/cvs-serv17580
        
        Added Files:
              Tag: rel-1-2
        	z3950-daemon-launch.sh z3950-daemon-shell.sh 
        Log Message:
        Scripts for Z39.50 search daemon
        
        --- NEW FILE ---
        #!/bin/sh
        
        # Script to start Koha background Z39.50 search daemon
        
        # Part of the Koha Library Mgmt System -  www.koha.org
        # Licensed under the GPL
        
        #----------------------------
        # Call this script during system startup, such as from rc.local
        
        # Bugs/To Do:
        #   Needs SysV-type start/stop options
        
        #----------------------------
        # User ID to run the daemon as.  Don't use "root"
        RunAsUser=apache
        
        KohaDir=/usr/local/www/koha/htdocs/cgi-bin/koha/acqui.simple
        export KohaDir
        
        #----------------------------
        if [ ! -d $KohaDir ]
        then
        	echo ERROR: Cannot find Koha directory $KohaDir
        	exit 1
        fi
        
        KohaZ3950Shell=$KohaDir/z3950-daemon-shell.sh
        
        if [ ! -x $KohaZ3950Shell ]
        then
        	echo ERROR: Cannot find Koha Z39.50 daemon launcher $KohaZ3950Shell
        	exit 1
        fi
        
        su -s /bin/sh -c '$KohaZ3950Shell &' - $RunAsUser &
        
        --- NEW FILE ---
        #!/bin/sh
        
        # Script to start Koha background Z39.50 search daemon
        
        # Part of the Koha Library Mgmt System -  www.koha.org
        # Licensed under the GPL
        
        #----------------------------
        # Do NOT run this script directly from system startup-
        #    Call  z3950-daemon-launch.sh  instead
        
        #----------------------------
        
        KohaDir=/usr/local/www/koha/htdocs/cgi-bin/koha/acqui.simple
        KohaModuleDir=/usr/local/koha/modules
        LogDir=/var/log/koha
        
        #----------------------------
        LOGFILE=$LogDir/z3950-daemon-`date +%Y%m%d-%H%M`.log
        
        touch $LOGFILE
        if [ ! -w $LOGFILE ]
        then
        	echo ERROR: Cannot write to log file $LOGFILE
        	exit 1
        fi
        
        KohaZ3950Script=$KohaDir/processz3950queue
        if [ ! -x $KohaZ3950Script ]
        then
        	echo ERROR: Cannot find Koha Z39.50 daemon script $KohaZ3950Script
        	exit 1
        fi
        
        PERL5LIB=$KohaModuleDir
        export PERL5LIB
        
        exec $KohaDir/processz3950queue >>$LOGFILE 2>&1
        
        
        
        
        From rangi at users.sourceforge.net  Tue Jun 11 13:02:31 2002
        From: rangi at users.sourceforge.net (Chris Cormack)
        Date: Tue, 11 Jun 2002 04:02:31 -0700
        Subject: [Koha-cvs] CVS: koha INSTALL,1.1.2.3,1.1.2.4
        Message-ID: 
        
        Update of /cvsroot/koha/koha
        In directory usw-pr-cvs1:/tmp/cvs-serv15823
        
        Modified Files:
              Tag: rel-1-2
        	INSTALL 
        Log Message:
        Little fix adding in the path to the updatedatabase script
        
        
        Index: INSTALL
        ===================================================================
        RCS file: /cvsroot/koha/koha/INSTALL,v
        retrieving revision 1.1.2.3
        retrieving revision 1.1.2.4
        diff -C2 -r1.1.2.3 -r1.1.2.4
        *** INSTALL	6 Jun 2002 14:43:40 -0000	1.1.2.3
        --- INSTALL	11 Jun 2002 11:02:28 -0000	1.1.2.4
        ***************
        *** 50,54 ****
          
          3.1 Update your database tables
        ! perl updatedatabase -I /pathtoC4 
          
          4. Edit koha.conf
        --- 50,54 ----
          
          3.1 Update your database tables
        ! perl scripts/updater/updatedatabase -I /pathtoC4 
          
          4. Edit koha.conf
        
        
        
        
        From rangi at users.sourceforge.net  Tue Jun 11 13:04:36 2002
        From: rangi at users.sourceforge.net (Chris Cormack)
        Date: Tue, 11 Jun 2002 04:04:36 -0700
        Subject: [Koha-cvs] CVS: koha News,NONE,1.1.2.1
        Message-ID: 
        
        Update of /cvsroot/koha/koha
        In directory usw-pr-cvs1:/tmp/cvs-serv17360
        
        Added Files:
              Tag: rel-1-2
        	News 
        Log Message:
        List of new features and bugfixes since 1.1.1 (simplified list i should say)
        
        
        --- NEW FILE ---
        Here Ive tried to collect all the bugfixes and stable new features added
        since 1.1.1
        
        * Keyword, Title and Author searches sped up.
        * Bugfix for borrower insert script.
        * Bugfix for writing off fines.
        * Budget breakdown in acquisitions is created on the fly (as opposed to written to an include)
        * Lots of tidy ups in the search module
        * Fixed display of reserves, on members and detail screens
        * Bugfix for manual invoices
        * Bugfix for catalogue maintenance
        * Tidied up decimal places for item costs
        * Bugfix to update group script
        * New Feature - Can restrict a keyword search to a dewey number
        * New Feature - Modify a borrower who is a guarantor causes relevant changes to be made to all their guarntees
        * Bug fix for combined author and title search (wasnt picking up series title)
        * Bugfix for reserve handling and charges
        * New Feature - Class search
        * New Feature - Dewey search
        * New Feature - Deleting borrowers checks their accounts for reserves, issues and fines
        * New Feature - translation script translator/
        * New Feature - Reading record, can be sorted by title or author, or date
        * New Feature - Simple acquisitions module
        
        
        
        
        From rangi at users.sourceforge.net  Tue Jun 11 13:24:38 2002
        From: rangi at users.sourceforge.net (Chris Cormack)
        Date: Tue, 11 Jun 2002 04:24:38 -0700
        Subject: [Koha-cvs] CVS: koha installer-lite.pl,NONE,1.1
        Message-ID: 
        
        Update of /cvsroot/koha/koha
        In directory usw-pr-cvs1:/tmp/cvs-serv26839
        
        Added Files:
        	installer-lite.pl 
        Log Message:
        Committed on behalf of Mike
        
        First cut at an installer that can run without superuser privileges
        
        
        --- NEW FILE ---
        #!/usr/bin/perl -w # please develop with -w
        
        use diagnostics;
        use strict; # please develop with the strict pragma
        
        system('clear');
        print qq|
        *******************************************
        * Welcome to the Koha Installation Guide  *
        *******************************************
        
        This installer will guide you through the process of installing Koha.
        It is not a completely automated installation, but a guide for further 
        information please read the documentation or visit the Koha website at
        http://www.koha.org
        
        To successfully use Koha you need some additional software:
        
        * A webserver (It was built to work with Apache, but there is no reason
        it should not work with any other webserver). 
         
        * Mysql (You could intead use postgres, or another sql based database) 
        
        * Perl
        
        Are you ready to go through the installation process now? (Y/[N]):
        |;
        
        my $answer = ;
        chomp $answer;
        
        if ($answer eq "Y" || $answer eq "y") {
        	print "Beginning setup... \n";
            } else {
            print qq|
        When you are ready to complete the installation just run this installer again.
        |;
            exit;
        };
        
        print "\n";
        
        
        #
        # Test for Perl - Do we need to explicity check versions?
        #
        print "\nChecking that perl and the required modules are installed ...\n";
            unless (eval "require 5.004") {
            die "Sorry, you need at least Perl 5.004\n";
        }
        
        #
        # Test for Perl Dependancies
        #
        my @missing = ();
        unless (eval require DBI)               { push @missing,"DBI" };
        unless (eval require Date::Manip)       { push @missing,"Date::Manip" };
        unless (eval require DBD::mysql)        { push @missing,"DBD::mysql" };
        unless (eval require Set::Scalar)       { push @missing,"Set::Scalar" };
        
        #
        # Print out a list of any missing modules
        #
        if (@missing > 0) {
            print "\n\n";
            print "You are missing some Perl modules which are required by Koha.\n";
            print "Once these modules have been installed, rerun this installery.\n";
            print "They can be installed by running (as root) the following:\n";
            foreach my $module (@missing) {
        	print "   perl -MCPAN -e 'install \"$module\"'\n";
        	exit(1);
            }} else{
            print "Perl and required modules appear to be installed, continuing...\n";
        };
        
        
        print "\n";
        
        #
        #KOHA conf
        #
        print qq|
        Koha uses a small configuration file that is usually placed in your
        /etc/ files directory (note: if you wish to place the koha.conf in 
        another location you will need to manually edit additional files).
        
        We will help you to now create your koha.conf file, once this file 
        has been created, please copy it to your destination folder
        (note: this may need to be done by your systems administrator).
        |;
        
        my $dbname;
        my $hostname;
        my $user;
        my $pass;
        my $inc_path;
        
        print "\n";
        print "\n";
        print qq|
        Please provide the name of the mysql database that you wish to use 
        for koha. This is normally "Koha".
        |;
        
        #Get the database name
        do {
        	print "Enter database name:";
        	chomp($dbname = );
        };
        
        
        print "\n";
        print "\n";
        print qq|
        Please provide the hostname for mysql.  Unless the database is located 
        on another machine this is likely to be "localhost".
        |;
        
        #Get the hostname for the database
        do {
        	print "Enter hostname:";
        	chomp($hostname = );
        };
        
        
        print "\n";
        print "\n";
        print qq|
        Please provide the name of the mysql user, who will have full administrative 
        rights to the $dbname database, when authenicating from $hostname.
        It is recommended that you do not use your "root" user.
        |;
        
        #Set the username for the database
        do {
        	print "Enter username:";
        	chomp($user = );
        };
        
        
        print "\n";
        print "\n";
        print qq|
        Please provide a password for the mysql user $user.
        |;
        
        #Set the password for the database user
        do {
        	print "Enter password:";
        	chomp($pass = );
        };
        
        print "\n";
        print "\n";
        print qq|
        Please provide the full path to your Koha Intranet/Librarians installation.
        Usually /usr/local/www/koha/htdocs
        |;
        
        #Get the password for the database user
        do {
        	print "Enter installation path:";
        	chomp($inc_path = );
        };
        
        
        #Create the configuration file
        open(SITES,">koha.conf") or die "Couldn't create file.  
        Must have write capability.\n";
        print SITES <);
        };
        
        
        print qq|
        Please enter the e-mail address for your webserver admin.
        Usually webmaster\@your.domain
        |;
        do {
        	print "Enter e-mail address:";
        	chomp($opac_svr_admin = );
        };
        
        
        print qq|
        Please enter the full path to your OPAC\'s document root.
        usually something like \"/usr/local/www/opac/htdocs\".
        |;
        do {
        	print "Enter Document Roots Path:";
        	chomp($opac_docu_root = );
        };
        
        
        #
        # Update Apache Conf File.
        #
        open(SITES,">>koha-apache.conf") or die "Couldn't write to file.  
        Must have write capability.\n";
        print SITES <
            ServerAdmin $opac_svr_admin
            DocumentRoot $opac_docu_root
            ServerName $opac_svr_name
            ErrorLog logs/opac-error_log
            TransferLog logs/opac-access_log common
        
        
        EOP
        ;
        close(SITES);
        
        
        #
        #Intranet Settings
        #
        my $intranet_svr_admin;
        my $intranet_svr_name;
        
        print qq|
        You need to setup your Apache configuration file for the
        Intranet/librarian virtual host.
        
        Please enter the servername for your Intranet/Librarian interface.
        Usually koha.your.domain
        |;
        do {
        	print "Enter servername address:";
        	chomp($intranet_svr_name = );
        };
        
        
        print qq|
        Please enter the e-mail address for your webserver admin.
        Usually webmaster\@your.domain
        |;
        do {
        	print "Enter e-mail address:";
        	chomp($intranet_svr_admin = );
        };
        
        
        
        #
        # Update Apache Conf File.
        #
        open(SITES,">>koha-apache.conf") or die "Couldn't write to file.  
        Must have write capability.\n";
        print SITES <
            ServerAdmin $intranet_svr_admin
            DocumentRoot $inc_path
            ServerName $intranet_svr_name
            ErrorLog logs/opac-error_log
            TransferLog logs/opac-access_log common
        
        
        EOP
        ;
        close(SITES);
        
        
        print "Successfully created the Apache Virtual Host Configuration file.\n";
        
        system('clear');
        print qq|
        *******************************************
        * Koha Installation Guide - Continued     *
        *******************************************
        
        In order to finish the installation of Koha, there is still a couple 
        of steps that you will need to complete.
        
          * Setup mysql
        	1. Create a new mysql database called for example Koha
        	   From command line: mysqladmin -uroot -ppassword create Koha 
        
        	2. Set up a koha user and password in mysql
                   Log in to mysql: mysql -uroot -ppassword 
        
        	   To create a user called "koha" who has full administrative 
        	   rights to the "Koha" database when authenticating from 
        	   "localhost", enter the following on mysql command line: 
        
        	    grant all privileges on Koha.* to koha\@localhost identified by 'kohapassword'\;
        
        	   Press ENTER, and if you see no errors then enter \q to quit mysql.
        
        
        	3. Use the mysql script to create the tables
        	   mysql -uusername -ppassword Koha < koha.mysql 
        
        	4. Update your database tables
        	   perl updatedatabase -I /pathtoC4 
        
        
          * Koha.conf
        	1. Copy Koha.conf to /etc/
        	   If you wish to locate the file in another location please read 
        	   the INSTALL and Hints files.
        
        
        |;
        #
        # It is completed
        #
        print "\nCongratulations ... your Koha installation is complete!\n";
        print "\nYou will need to restart your webserver before using Koha!\n";
        
        
        
        
        From rangi at users.sourceforge.net  Tue Jun 11 13:25:52 2002
        From: rangi at users.sourceforge.net (Chris Cormack)
        Date: Tue, 11 Jun 2002 04:25:52 -0700
        Subject: [Koha-cvs] CVS: koha installer-lite.pl,NONE,1.1.2.1
        Message-ID: 
        
        Update of /cvsroot/koha/koha
        In directory usw-pr-cvs1:/tmp/cvs-serv27456
        
        Added Files:
              Tag: rel-1-2
        	installer-lite.pl 
        Log Message:
        Committed on behalf of Mike
        
        Installer that can run without needing superuser privileges
        
        
        
        --- NEW FILE ---
        #!/usr/bin/perl -w # please develop with -w
        
        use diagnostics;
        use strict; # please develop with the strict pragma
        
        system('clear');
        print qq|
        *******************************************
        * Welcome to the Koha Installation Guide  *
        *******************************************
        
        This installer will guide you through the process of installing Koha.
        It is not a completely automated installation, but a guide for further 
        information please read the documentation or visit the Koha website at
        http://www.koha.org
        
        To successfully use Koha you need some additional software:
        
        * A webserver (It was built to work with Apache, but there is no reason
        it should not work with any other webserver). 
         
        * Mysql (You could intead use postgres, or another sql based database) 
        
        * Perl
        
        Are you ready to go through the installation process now? (Y/[N]):
        |;
        
        my $answer = ;
        chomp $answer;
        
        if ($answer eq "Y" || $answer eq "y") {
        	print "Beginning setup... \n";
            } else {
            print qq|
        When you are ready to complete the installation just run this installer again.
        |;
            exit;
        };
        
        print "\n";
        
        
        #
        # Test for Perl - Do we need to explicity check versions?
        #
        print "\nChecking that perl and the required modules are installed ...\n";
            unless (eval "require 5.004") {
            die "Sorry, you need at least Perl 5.004\n";
        }
        
        #
        # Test for Perl Dependancies
        #
        my @missing = ();
        unless (eval require DBI)               { push @missing,"DBI" };
        unless (eval require Date::Manip)       { push @missing,"Date::Manip" };
        unless (eval require DBD::mysql)        { push @missing,"DBD::mysql" };
        unless (eval require Set::Scalar)       { push @missing,"Set::Scalar" };
        
        #
        # Print out a list of any missing modules
        #
        if (@missing > 0) {
            print "\n\n";
            print "You are missing some Perl modules which are required by Koha.\n";
            print "Once these modules have been installed, rerun this installery.\n";
            print "They can be installed by running (as root) the following:\n";
            foreach my $module (@missing) {
        	print "   perl -MCPAN -e 'install \"$module\"'\n";
        	exit(1);
            }} else{
            print "Perl and required modules appear to be installed, continuing...\n";
        };
        
        
        print "\n";
        
        #
        #KOHA conf
        #
        print qq|
        Koha uses a small configuration file that is usually placed in your
        /etc/ files directory (note: if you wish to place the koha.conf in 
        another location you will need to manually edit additional files).
        
        We will help you to now create your koha.conf file, once this file 
        has been created, please copy it to your destination folder
        (note: this may need to be done by your systems administrator).
        |;
        
        my $dbname;
        my $hostname;
        my $user;
        my $pass;
        my $inc_path;
        
        print "\n";
        print "\n";
        print qq|
        Please provide the name of the mysql database that you wish to use 
        for koha. This is normally "Koha".
        |;
        
        #Get the database name
        do {
        	print "Enter database name:";
        	chomp($dbname = );
        };
        
        
        print "\n";
        print "\n";
        print qq|
        Please provide the hostname for mysql.  Unless the database is located 
        on another machine this is likely to be "localhost".
        |;
        
        #Get the hostname for the database
        do {
        	print "Enter hostname:";
        	chomp($hostname = );
        };
        
        
        print "\n";
        print "\n";
        print qq|
        Please provide the name of the mysql user, who will have full administrative 
        rights to the $dbname database, when authenicating from $hostname.
        It is recommended that you do not use your "root" user.
        |;
        
        #Set the username for the database
        do {
        	print "Enter username:";
        	chomp($user = );
        };
        
        
        print "\n";
        print "\n";
        print qq|
        Please provide a password for the mysql user $user.
        |;
        
        #Set the password for the database user
        do {
        	print "Enter password:";
        	chomp($pass = );
        };
        
        print "\n";
        print "\n";
        print qq|
        Please provide the full path to your Koha Intranet/Librarians installation.
        Usually /usr/local/www/koha/htdocs
        |;
        
        #Get the password for the database user
        do {
        	print "Enter installation path:";
        	chomp($inc_path = );
        };
        
        
        #Create the configuration file
        open(SITES,">koha.conf") or die "Couldn't create file.  
        Must have write capability.\n";
        print SITES <);
        };
        
        
        print qq|
        Please enter the e-mail address for your webserver admin.
        Usually webmaster\@your.domain
        |;
        do {
        	print "Enter e-mail address:";
        	chomp($opac_svr_admin = );
        };
        
        
        print qq|
        Please enter the full path to your OPAC\'s document root.
        usually something like \"/usr/local/www/opac/htdocs\".
        |;
        do {
        	print "Enter Document Roots Path:";
        	chomp($opac_docu_root = );
        };
        
        
        #
        # Update Apache Conf File.
        #
        open(SITES,">>koha-apache.conf") or die "Couldn't write to file.  
        Must have write capability.\n";
        print SITES <
            ServerAdmin $opac_svr_admin
            DocumentRoot $opac_docu_root
            ServerName $opac_svr_name
            ErrorLog logs/opac-error_log
            TransferLog logs/opac-access_log common
        
        
        EOP
        ;
        close(SITES);
        
        
        #
        #Intranet Settings
        #
        my $intranet_svr_admin;
        my $intranet_svr_name;
        
        print qq|
        You need to setup your Apache configuration file for the
        Intranet/librarian virtual host.
        
        Please enter the servername for your Intranet/Librarian interface.
        Usually koha.your.domain
        |;
        do {
        	print "Enter servername address:";
        	chomp($intranet_svr_name = );
        };
        
        
        print qq|
        Please enter the e-mail address for your webserver admin.
        Usually webmaster\@your.domain
        |;
        do {
        	print "Enter e-mail address:";
        	chomp($intranet_svr_admin = );
        };
        
        
        
        #
        # Update Apache Conf File.
        #
        open(SITES,">>koha-apache.conf") or die "Couldn't write to file.  
        Must have write capability.\n";
        print SITES <
            ServerAdmin $intranet_svr_admin
            DocumentRoot $inc_path
            ServerName $intranet_svr_name
            ErrorLog logs/opac-error_log
            TransferLog logs/opac-access_log common
        
        
        EOP
        ;
        close(SITES);
        
        
        print "Successfully created the Apache Virtual Host Configuration file.\n";
        
        system('clear');
        print qq|
        *******************************************
        * Koha Installation Guide - Continued     *
        *******************************************
        
        In order to finish the installation of Koha, there is still a couple 
        of steps that you will need to complete.
        
          * Setup mysql
        	1. Create a new mysql database called for example Koha
        	   From command line: mysqladmin -uroot -ppassword create Koha 
        
        	2. Set up a koha user and password in mysql
                   Log in to mysql: mysql -uroot -ppassword 
        
        	   To create a user called "koha" who has full administrative 
        	   rights to the "Koha" database when authenticating from 
        	   "localhost", enter the following on mysql command line: 
        
        	    grant all privileges on Koha.* to koha\@localhost identified by 'kohapassword'\;
        
        	   Press ENTER, and if you see no errors then enter \q to quit mysql.
        
        
        	3. Use the mysql script to create the tables
        	   mysql -uusername -ppassword Koha < koha.mysql 
        
        	4. Update your database tables
        	   perl updatedatabase -I /pathtoC4 
        
        
          * Koha.conf
        	1. Copy Koha.conf to /etc/
        	   If you wish to locate the file in another location please read 
        	   the INSTALL and Hints files.
        
        
        |;
        #
        # It is completed
        #
        print "\nCongratulations ... your Koha installation is complete!\n";
        print "\nYou will need to restart your webserver before using Koha!\n";
        
        
        
        
        From rangi at users.sourceforge.net  Wed Jun 12 00:03:46 2002
        From: rangi at users.sourceforge.net (Chris Cormack)
        Date: Tue, 11 Jun 2002 15:03:46 -0700
        Subject: [Koha-cvs] CVS: koha/misc backup.sh,NONE,1.1
        Message-ID: 
        
        Update of /cvsroot/koha/koha/misc
        In directory usw-pr-cvs1:/tmp/cvs-serv15800/misc
        
        Added Files:
        	backup.sh 
        Log Message:
        The script mike uses to run backups on the koha database
        
        
        
        --- NEW FILE ---
        #!/bin/sh
        # Script to create daily backups of the Koha database.
        # Based on a script by John Pennington
        KOHA_DATE=`date '+%y%m%d'`
        KOHA_DUMP=/tmp/koha-$KOHA_DATE.dump
        KOHA_BACKUP=/tmp/koha-$KOHA_DATE.dump.gz
        
        mysqldump -u koha -ppassword koha > $KOHA_DUMP &&
        gzip -f $KOHA_DUMP &&
        # Creates the dump file and compresses it;
        # -u is the Koha user, -p is the password for that user.
        # The -f switch on gzip forces it to overwrite the file if one exists.
        
        mv $KOHA_BACKUP /home/kohaadmin &&
        chown kohaadmin.users /home/kohaadmin/koha-$KOHA_DATE.dump.gz &&
        chmod 600 /home/kohaadmin/koha-$KOHA_DATE.dump.gz &&
        # Makes the compressed dump file property of the kohaadmin user.
        # Make sure that you replace kohaadmin with a real user.
        
        echo "$KOHA_BACKUP was successfully created." | mail kohaadmin -s $KOHA_BACKUP ||
        echo "$KOHA_BACKUP was NOT successfully created." | mail kohaadmin -s $KOHA_BACKUP
        # Notifies kohaadmin of (un)successful backup creation
        # EOF
        
        
        
        From dragon28 at users.sourceforge.net  Wed Jun 12 10:58:06 2002
        From: dragon28 at users.sourceforge.net (Mike Mylonas)
        Date: Wed, 12 Jun 2002 01:58:06 -0700
        Subject: [Koha-cvs] CVS: koha INSTALL,1.1.2.4,1.1.2.5
        Message-ID: 
        
        Update of /cvsroot/koha/koha
        In directory usw-pr-cvs1:/tmp/cvs-serv25314/koha
        
        Modified Files:
              Tag: rel-1-2
        	INSTALL 
        Log Message:
        fixed typos
        
        Index: INSTALL
        ===================================================================
        RCS file: /cvsroot/koha/koha/INSTALL,v
        retrieving revision 1.1.2.4
        retrieving revision 1.1.2.5
        diff -C2 -r1.1.2.4 -r1.1.2.5
        *** INSTALL	11 Jun 2002 11:02:28 -0000	1.1.2.4
        --- INSTALL	12 Jun 2002 08:58:04 -0000	1.1.2.5
        ***************
        *** 38,42 ****
          
          To create a user called "koha" who has full administrative rights to
        ! the "Koha" database when autheicting from "localhost", enter the
          following on mysql command line: 
          
        --- 38,42 ----
          
          To create a user called "koha" who has full administrative rights to
        ! the "Koha" database when authenticating from "localhost", enter the
          following on mysql command line: 
          
        ***************
        *** 158,168 ****
          Then its done: type circ and your away, ready to issue and return.
          
        ! In release 1.1.0 on there is now a web-based circulation module, So
          issues and returns can be done from there, or from circ. 
          
          
          You will find some Koha config examples in Hints 
        - 
        - 
        - 
        - 
        --- 158,164 ----
          Then its done: type circ and your away, ready to issue and return.
          
        ! Since release 1.1.0 on there is now a web-based circulation module, So
          issues and returns can be done from there, or from circ. 
          
          
          You will find some Koha config examples in Hints 
        
        
        
        
        From amillar at users.sourceforge.net  Wed Jun 12 22:25:37 2002
        From: amillar at users.sourceforge.net (Alan Millar)
        Date: Wed, 12 Jun 2002 13:25:37 -0700
        Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.17,1.6.2.18
        Message-ID: 
        
        Update of /cvsroot/koha/koha/acqui.simple
        In directory usw-pr-cvs1:/tmp/cvs-serv22636
        
        Modified Files:
              Tag: rel-1-2
        	marcimport.pl 
        Log Message:
        fix bug in arrayed subfields
        
        Index: marcimport.pl
        ===================================================================
        RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v
        retrieving revision 1.6.2.17
        retrieving revision 1.6.2.18
        diff -C2 -r1.6.2.17 -r1.6.2.18
        *** marcimport.pl	10 Jun 2002 06:47:17 -0000	1.6.2.17
        --- marcimport.pl	12 Jun 2002 20:25:35 -0000	1.6.2.18
        ***************
        *** 636,644 ****
          	    	if ( $fieldname=$tagmap{ $field->{'tag'} }->{$subfield}->{name} ) {
          		    # Yes, so keep the value
        ! 		    $bib->{$fieldname}=$field->{'subfields'}->{$subfield};
          		    # if it was an array, just keep first element.
        ! 		    if (ref($bib->{$fieldname}) eq 'ARRAY') {
        ! 			$bib->{$fieldname}=$$bib->{fieldname}[0]
          		    } # if array
          		    # see if this field should have trailing chars dropped
          	    	    if ($strip=$tagmap{ $field->{'tag'} }->{$subfield}->{striptrail} ) {
        --- 636,646 ----
          	    	if ( $fieldname=$tagmap{ $field->{'tag'} }->{$subfield}->{name} ) {
          		    # Yes, so keep the value
        ! 		    if ( ref($field->{'subfields'}->{$subfield} ) eq 'ARRAY' ) {
          		    # if it was an array, just keep first element.
        ! 		        $bib->{$fieldname}=$field->{'subfields'}->{$subfield}[0];
        ! 		    } else {
        ! 		        $bib->{$fieldname}=$field->{'subfields'}->{$subfield};
          		    } # if array
        + 		    print "$field->{'tag'} $subfield $fieldname=$bib->{$fieldname}\n" if $debug;
          		    # see if this field should have trailing chars dropped
          	    	    if ($strip=$tagmap{ $field->{'tag'} }->{$subfield}->{striptrail} ) {
        
        
        
        
        From amillar at users.sourceforge.net  Thu Jun 13 00:11:16 2002
        From: amillar at users.sourceforge.net (Alan Millar)
        Date: Wed, 12 Jun 2002 15:11:16 -0700
        Subject: [Koha-cvs] CVS: koha/updater updatedatabase,1.4.2.3,1.4.2.4
        Message-ID: 
        
        Update of /cvsroot/koha/koha/updater
        In directory usw-pr-cvs1:/tmp/cvs-serv7765/updater
        
        Modified Files:
              Tag: rel-1-2
        	updatedatabase 
        Log Message:
        Streamline z3950 search results
        
        Index: updatedatabase
        ===================================================================
        RCS file: /cvsroot/koha/koha/updater/updatedatabase,v
        retrieving revision 1.4.2.3
        retrieving revision 1.4.2.4
        diff -C2 -r1.4.2.3 -r1.4.2.4
        *** updatedatabase	9 Jun 2002 05:28:26 -0000	1.4.2.3
        --- updatedatabase	12 Jun 2002 22:11:14 -0000	1.4.2.4
        ***************
        *** 46,51 ****
          	enddate int, 
          	done smallint, 
        - 	results longblob, 
        - 	numrecords int, 
          	servers text, 
          	identifier char(30))",
        --- 46,49 ----
        
        
        
        
        From amillar at users.sourceforge.net  Thu Jun 13 00:11:16 2002
        From: amillar at users.sourceforge.net (Alan Millar)
        Date: Wed, 12 Jun 2002 15:11:16 -0700
        Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.18,1.6.2.19
        Message-ID: 
        
        Update of /cvsroot/koha/koha/acqui.simple
        In directory usw-pr-cvs1:/tmp/cvs-serv7765/acqui.simple
        
        Modified Files:
              Tag: rel-1-2
        	marcimport.pl 
        Log Message:
        Streamline z3950 search results
        
        Index: marcimport.pl
        ===================================================================
        RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v
        retrieving revision 1.6.2.18
        retrieving revision 1.6.2.19
        diff -C2 -r1.6.2.18 -r1.6.2.19
        *** marcimport.pl	12 Jun 2002 20:25:35 -0000	1.6.2.18
        --- marcimport.pl	12 Jun 2002 22:11:14 -0000	1.6.2.19
        ***************
        *** 196,200 ****
              my $qcontrolnumber=$input->param('controlnumber');
          
        !     # See if a particular result record was specified
              if ($qisbn || $qissn || $qlccn || $qcontrolnumber) {
          	print "New File
        \n"; --- 196,200 ---- my $qcontrolnumber=$input->param('controlnumber'); ! # See if a particular result item was specified if ($qisbn || $qissn || $qlccn || $qcontrolnumber) { print "New File
        \n"; *************** *** 345,382 **** Full MARC Record available at bottom
        ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
        Title$titleinput
        Subtitle$subtitleinput
        Author$authorinput
        Additional Authors$additionalauthorsinput
        Illustrator$illustratorinput
        Copyright$copyrightinput
        Series Title$seriestitleinput
        Volume$volumeinput
        Number$numberinput
        Volume Date$volumedateinput
        Volume Description$volumeddescinput
        Subject$subjectinput
        Notes$noteinput
        Item Type
        ISBN$isbninput
        ISSN$issninput
        LCCN$lccninput
        Dewey$deweyinput
        Subclass$subclassinput
        Publication Year$pubyearinput
        Publisher$publisherinput
        Place$placeinput
        Pages$pagesinput
        Size$sizeinput
        ! ! ! $fileinput ! $marcinput ! $origisbn ! $origissn ! $origlccn ! $origcontrolnumber
        $marctext --- 345,382 ---- Full MARC Record available at bottom
        ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
        Title$titleinput
        Subtitle$subtitleinput
        Author$authorinput
        Additional Authors$additionalauthorsinput
        Illustrator$illustratorinput
        Copyright$copyrightinput
        Series Title$seriestitleinput
        Volume$volumeinput
        Number$numberinput
        Volume Date$volumedateinput
        Volume Description$volumeddescinput
        Subject$subjectinput
        Notes$noteinput
        Item Type
        ISBN$isbninput
        ISSN$issninput
        LCCN$lccninput
        Dewey$deweyinput
        Subclass$subclassinput
        Publication Year$pubyearinput
        Publisher$publisherinput
        Place$placeinput
        Pages$pagesinput
        Size$sizeinput
        ! ! ! $fileinput ! $marcinput ! $origisbn ! $origissn ! $origlccn ! $origcontrolnumber
        $marctext *************** *** 384,393 **** } # foreach record } else { ! # No result file specified, list results ! ListSearchResults($dbh,$input); } # if } # sub ProcessFile ! sub ListSearchResults { use strict; --- 384,393 ---- } # foreach record } else { ! # No result item specified, list results ! ListFileRecords($dbh,$input); } # if } # sub ProcessFile ! sub ListFileRecords { use strict; *************** *** 399,407 **** my ( $field, ); - my $data; - my $name; my $z3950=0; my $recordsource; --- 399,411 ---- my ( + $sth, $sti, $field, + $data, # records in MARC file format + $name, + $srvid, + %servernames, + $serverdb, ); my $z3950=0; my $recordsource; *************** *** 409,413 **** my ($numrecords,$resultsid,$data,$startdate,$enddate); ! # File can be results of z3950 search or uploaded MARC data # if z3950 results --- 413,417 ---- my ($numrecords,$resultsid,$data,$startdate,$enddate); ! # File can be z3950 search query or uploaded MARC data # if z3950 results *************** *** 417,421 **** } else { # This is a Marc upload ! my $sth=$dbh->prepare("select marc,name from uploadedmarc where id=$file"); $sth->execute; ($data, $name) = $sth->fetchrow; --- 421,425 ---- } else { # This is a Marc upload ! $sth=$dbh->prepare("select marc,name from uploadedmarc where id=$file"); $sth->execute; ($data, $name) = $sth->fetchrow; *************** *** 438,479 **** # This is a z3950 search ! my $id=$1; # search results id number ! my $sth=$dbh->prepare("select servers from z3950queue where id=$id"); ! $sth->execute; ! my ($servers) = $sth->fetchrow; my $serverstring; my $starttimer=time(); ! # loop through all servers in search request ! foreach $serverstring (split(/\s+/, $servers)) { ! my ($name, $server, $database, $auth) = split(/\//, $serverstring, 4); ! if ($name eq 'MAN') { ! print "$server/$database
        \n"; ! } else { ! my $sti=$dbh->prepare("select name from ! z3950servers where id=$name"); ! $sti->execute; ! my ($longname)=$sti->fetchrow; ! print "\n"; ! if ($longname) { ! print "$longname \n"; ! } else { ! print "$server/$database \n"; ! } ! } ! my $q_server=$dbh->quote($serverstring); ! my $startrecord=$input->param("ST-$name"); ($startrecord) || ($startrecord='0'); - my $sti=$dbh->prepare(" - select numrecords,id,results,startdate,enddate - from z3950results - where queryid=$id and server=$q_server"); - $sti->execute; - ($numrecords,$resultsid,$data,$startdate,$enddate) = $sti->fetchrow; my $serverplaceholder=''; foreach ($input->param) { (next) unless (/ST-(.+)/); my $serverid=$1; ! (next) if ($serverid eq $name); my $place=$input->param("ST-$serverid"); $serverplaceholder.="\&ST-$serverid=$place"; --- 442,475 ---- # This is a z3950 search ! my $id=$1; # search query id number my $serverstring; my $starttimer=time(); ! $sth=$dbh->prepare(" ! select z3950results.numrecords,z3950results.id,z3950results.results, ! z3950results.startdate,z3950results.enddate,server ! from z3950queue left outer join z3950results ! on z3950queue.id=z3950results.queryid ! where z3950queue.id=? ! order by server ! "); ! $sth->execute($id); ! if ( $sth->rows ) { ! # loop through all servers in search results ! while ( ($numrecords,$resultsid,$data, ! $startdate,$enddate,$serverstring) = $sth->fetchrow ) { ! my ($srvid, $server, $database, $auth) = split(/\//, $serverstring, 4); ! #print "server=$serverstring\n"; ! if ( $server ) { ! print " " . ! &z3950servername($dbh,$srvid,"$server/$database") . "\n"; ! } # if $server ! my $startrecord=$input->param("ST-$srvid"); ($startrecord) || ($startrecord='0'); my $serverplaceholder=''; foreach ($input->param) { (next) unless (/ST-(.+)/); my $serverid=$1; ! (next) if ($serverid eq $srvid); my $place=$input->param("ST-$serverid"); $serverplaceholder.="\&ST-$serverid=$place"; *************** *** 483,487 **** my $next=''; if ($startrecord>0) { ! $previous="Previous"; } my $highest; --- 479,483 ---- my $next=''; if ($startrecord>0) { ! $previous="Previous"; } my $highest; *************** *** 489,505 **** ($highest>$numrecords) && ($highest=$numrecords); if ($numrecords>$startrecord+10) { ! $next="Next"; } print "[Viewing ".($startrecord+1)." to ".$highest." of $numrecords records] $previous | $next
        \n"; } else { print "
        \n"; } print "
          \n"; - my $stj=$dbh->prepare("update z3950results - set highestseen=? where id=?"); - $stj->execute($startrecord+10,$resultsid); ! if ($sti->rows == 0) { ! print "pending..."; } elsif ($enddate == 0) { my $now=time(); --- 485,501 ---- ($highest>$numrecords) && ($highest=$numrecords); if ($numrecords>$startrecord+10) { ! $next="Next"; } print "[Viewing ".($startrecord+1)." to ".$highest." of $numrecords records] $previous | $next
          \n"; + my $stj=$dbh->prepare("update z3950results + set highestseen=? where id=?"); + $stj->execute($startrecord+10,$resultsid); } else { print "
          \n"; } print "
            \n"; ! if (! $server ) { ! print "Search still pending..."; } elsif ($enddate == 0) { my $now=time(); *************** *** 513,530 **** print "processing... ($elapsedtime)"; } elsif ($numrecords) { ! my $splitchar=chr(29); ! my @records=split(/$splitchar/, $data); ! $data=''; my $i; for ($i=$startrecord; $i<$startrecord+10; $i++) { ! $data.=$records[$i].$splitchar; ! } ! @records=parsemarcfileformat($data); ! my $counter=0; ! foreach $record (@records) { ! ! &PrintResultRecordLink($record,$resultsid); ! ! } # foreach record print "

            \n"; } else { --- 509,519 ---- print "processing... ($elapsedtime)"; } elsif ($numrecords) { ! my @records=parsemarcfileformat($data); my $i; for ($i=$startrecord; $i<$startrecord+10; $i++) { ! if ( $records[$i] ) { ! &PrintResultRecordLink($records[$i],$resultsid); ! } # if record ! } # for records print "

            \n"; } else { *************** *** 532,538 **** } print "

          \n"; ! } my $elapsed=time()-$starttimer; print "
          It took $elapsed seconds to process this page.\n"; } else { # This is an uploaded Marc record --- 521,530 ---- } print "
        \n"; ! } # foreach server my $elapsed=time()-$starttimer; print "
        It took $elapsed seconds to process this page.\n"; + } else { + print "No results found for query $id/n"; + } # if rows } else { # This is an uploaded Marc record *************** *** 546,550 **** } # if z3950 or marc upload print "
    \n"; ! } # sub ListSearchResults sub PrintResultRecordLink { --- 538,567 ---- } # if z3950 or marc upload print "

    \n"; ! } # sub ListFileRecords ! ! #-------------- ! sub z3950servername { ! # inputs ! my ( ! $dbh, ! $srvid, # server id number ! $default, ! )=@_; ! # return ! my $longname; ! #---- ! ! my $sti=$dbh->prepare("select name ! from z3950servers ! where id=?"); ! $sti->execute($srvid); ! if ( ! $sti->err ) { ! ($longname)=$sti->fetchrow; ! } ! if (! $longname) { ! $longname="$default"; ! } ! return $longname; ! } # sub z3950servername sub PrintResultRecordLink { *************** *** 637,641 **** # Yes, so keep the value if ( ref($field->{'subfields'}->{$subfield} ) eq 'ARRAY' ) { ! # if it was an array, just keep first element. $bib->{$fieldname}=$field->{'subfields'}->{$subfield}[0]; } else { --- 654,658 ---- # Yes, so keep the value if ( ref($field->{'subfields'}->{$subfield} ) eq 'ARRAY' ) { ! # if it was an array, just keep first element. $bib->{$fieldname}=$field->{'subfields'}->{$subfield}[0]; } else { *************** *** 770,774 **** $elapsedtime, $resultstatus, $statuscolor, ! $id, $term, $type, $done, $numrecords, $length, $startdate, $enddate, $servers, $record,$bib,$title, --- 787,791 ---- $elapsedtime, $resultstatus, $statuscolor, ! $id, $term, $type, $done, $startdate, $enddate, $servers, $record,$bib,$title, *************** *** 783,792 **** # Check queued queries $sth=$dbh->prepare("select id,term,type,done, ! numrecords,length(results),startdate,enddate,servers from z3950queue order by id desc limit 20 "); $sth->execute; ! while ( ($id, $term, $type, $done, $numrecords, $length, $startdate, $enddate, $servers) = $sth->fetchrow) { $type=uc($type); --- 800,809 ---- # Check queued queries $sth=$dbh->prepare("select id,term,type,done, ! startdate,enddate,servers from z3950queue order by id desc limit 20 "); $sth->execute; ! while ( ($id, $term, $type, $done, $startdate, $enddate, $servers) = $sth->fetchrow) { $type=uc($type); From amillar at users.sourceforge.net Thu Jun 13 00:34:02 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Wed, 12 Jun 2002 15:34:02 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.19,1.6.2.20 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv19163 Modified Files: Tag: rel-1-2 marcimport.pl Log Message: fix array handling bug in Marc formatted display Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.19 retrieving revision 1.6.2.20 diff -C2 -r1.6.2.19 -r1.6.2.20 *** marcimport.pl 12 Jun 2002 22:11:14 -0000 1.6.2.19 --- marcimport.pl 12 Jun 2002 22:33:59 -0000 1.6.2.20 *************** *** 1591,1594 **** --- 1591,1595 ---- $label, $subfieldcode,$subfieldvalue, + @values, $value ); *************** *** 1618,1623 **** foreach $subfieldcode ( sort( keys %{ $field->{'subfields'} } )) { $subfieldvalue=$field->{'subfields'}->{$subfieldcode}; ! $marctext.="$subfieldcode " . ! "$subfieldvalue\n"; } # foreach subfield $marctext.="\n"; --- 1619,1632 ---- foreach $subfieldcode ( sort( keys %{ $field->{'subfields'} } )) { $subfieldvalue=$field->{'subfields'}->{$subfieldcode}; ! if (ref($subfieldvalue) eq 'ARRAY' ) { ! # if it's a pointer to array, get the values ! @values=@{$subfieldvalue}; ! } else { ! @values=( $subfieldvalue ); ! } # if subfield array ! foreach $value ( @values ) { ! $marctext.="$subfieldcode " . ! "$value\n"; ! } # foreach value } # foreach subfield $marctext.="\n"; From rangi at users.sourceforge.net Thu Jun 13 05:16:57 2002 From: rangi at users.sourceforge.net (Chris Cormack) Date: Wed, 12 Jun 2002 20:16:57 -0700 Subject: [Koha-cvs] CVS: koha/circ returns.pl,1.5,1.6 Message-ID: Update of /cvsroot/koha/koha/circ In directory usw-pr-cvs1:/tmp/cvs-serv2423/circ Modified Files: returns.pl Log Message: Fix to get list of overdue items showing correctly Index: returns.pl =================================================================== RCS file: /cvsroot/koha/koha/circ/returns.pl,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** returns.pl 6 Jun 2002 02:51:38 -0000 1.5 --- returns.pl 13 Jun 2002 03:16:55 -0000 1.6 *************** *** 322,325 **** --- 322,326 ---- my $items = $flags->{$flag}->{'itemlist'}; foreach my $item (sort {$a->{'date_due'} cmp $b->{'date_due'}} @$items) { + my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0); $itemsoverdue .= <<"EOF"; $item->{'date_due'} From rangi at users.sourceforge.net Thu Jun 13 05:16:57 2002 From: rangi at users.sourceforge.net (Chris Cormack) Date: Wed, 12 Jun 2002 20:16:57 -0700 Subject: [Koha-cvs] CVS: koha/C4/Circulation Circ2.pm,1.27,1.28 Message-ID: Update of /cvsroot/koha/koha/C4/Circulation In directory usw-pr-cvs1:/tmp/cvs-serv2423/C4/Circulation Modified Files: Circ2.pm Log Message: Fix to get list of overdue items showing correctly Index: Circ2.pm =================================================================== RCS file: /cvsroot/koha/koha/C4/Circulation/Circ2.pm,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** Circ2.pm 6 Jun 2002 02:48:53 -0000 1.27 --- Circ2.pm 13 Jun 2002 03:16:55 -0000 1.28 *************** *** 505,508 **** --- 505,509 ---- $messages->{'WasReturned'}; } + ($borrower) = getpatroninformation(\%env, $currentborrower, 0); # transfer book my ($transfered, $mess, $item) = transferbook($branch, $barcode); From rangi at users.sourceforge.net Thu Jun 13 05:17:20 2002 From: rangi at users.sourceforge.net (Chris Cormack) Date: Wed, 12 Jun 2002 20:17:20 -0700 Subject: [Koha-cvs] CVS: koha/circ circulation.pl,1.27,1.28 Message-ID: Update of /cvsroot/koha/koha/circ In directory usw-pr-cvs1:/tmp/cvs-serv2564/circ Modified Files: circulation.pl Log Message: Fix to get sticky due date working Index: circulation.pl =================================================================== RCS file: /cvsroot/koha/koha/circ/circulation.pl,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -r1.27 -r1.28 *** circulation.pl 6 Jun 2002 02:51:38 -0000 1.27 --- circulation.pl 13 Jun 2002 03:17:18 -0000 1.28 *************** *** 101,104 **** --- 101,105 ---- unless ($invalidduedate) { + $env{'datedue'}=$datedue; my @time=localtime(time); my $date= (1900+$time[5])."-".($time[4]+1)."-".$time[3]; From rangi at users.sourceforge.net Thu Jun 13 06:28:37 2002 From: rangi at users.sourceforge.net (Chris Cormack) Date: Wed, 12 Jun 2002 21:28:37 -0700 Subject: [Koha-cvs] CVS: koha INSTALL,1.1.2.5,1.1.2.6 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv19880 Modified Files: Tag: rel-1-2 INSTALL Log Message: Changing the order, as he update database script looks for the koha.conf file So needs to be run after that is edited Index: INSTALL =================================================================== RCS file: /cvsroot/koha/koha/INSTALL,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -C2 -r1.1.2.5 -r1.1.2.6 *** INSTALL 12 Jun 2002 08:58:04 -0000 1.1.2.5 --- INSTALL 13 Jun 2002 04:28:35 -0000 1.1.2.6 *************** *** 49,55 **** mysql -uusername -ppassword Koha < koha.mysql - 3.1 Update your database tables - perl scripts/updater/updatedatabase -I /pathtoC4 - 4. Edit koha.conf Set the database name to what you have called your database, hostname --- 49,52 ---- *************** *** 73,77 **** as www-data) ! 6. Create directories for scripts and html documents. Here you need to decide where your scripts and html are going to live. And edit modules/C4/Output.pm to reflect that. --- 70,77 ---- as www-data) ! 6. Update your database tables ! perl scripts/updater/updatedatabase -I /pathtoC4 ! ! 7. Create directories for scripts and html documents. Here you need to decide where your scripts and html are going to live. And edit modules/C4/Output.pm to reflect that. *************** *** 96,100 **** ! 7. Set up your Online Public Access Catalogue (OPAC) Set up a webspace for the OPAC: For example: You might make --- 96,100 ---- ! 8. Set up your Online Public Access Catalogue (OPAC) Set up a webspace for the OPAC: For example: You might make *************** *** 124,128 **** Find supplementary information and config examples in Hints ! 8. Set up the intranet/librarian interface Create new directories and additional httpd.conf changes to Set up --- 124,128 ---- Find supplementary information and config examples in Hints ! 9. Set up the intranet/librarian interface Create new directories and additional httpd.conf changes to Set up *************** *** 137,141 **** ! 9. Configure SECURITY for the Librarians/Intranet Interface If you are using AuthenDBI to do your authentication, you will need to add some users to the users table in the koha database. And edit your --- 137,141 ---- ! 10. Configure SECURITY for the Librarians/Intranet Interface If you are using AuthenDBI to do your authentication, you will need to add some users to the users table in the koha database. And edit your *************** *** 149,153 **** ! 10. Set up Issues, Returns and Telnet interface. Since we have already copied the files in scripts/C4 into somewhere in our perl source tree --- 149,153 ---- ! 11. Set up Issues, Returns and Telnet interface. Since we have already copied the files in scripts/C4 into somewhere in our perl source tree From rangi at users.sourceforge.net Fri Jun 14 07:07:39 2002 From: rangi at users.sourceforge.net (Chris Cormack) Date: Thu, 13 Jun 2002 22:07:39 -0700 Subject: [Koha-cvs] CVS: koha installer.pl,1.2.2.12,1.2.2.13 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv32589 Modified Files: Tag: rel-1-2 installer.pl Log Message: Very close to being ready, has some issues with the path to call mysql, ill fix this after dinner. Index: installer.pl =================================================================== RCS file: /cvsroot/koha/koha/installer.pl,v retrieving revision 1.2.2.12 retrieving revision 1.2.2.13 diff -C2 -r1.2.2.12 -r1.2.2.13 *** installer.pl 6 Jun 2002 14:50:32 -0000 1.2.2.12 --- installer.pl 14 Jun 2002 05:07:37 -0000 1.2.2.13 *************** *** 4,7 **** --- 4,12 ---- use strict; # please develop with the strict pragma + unless ($< == 0) { + print "You must be root to run this script.\n"; + exit 1; + } + system('clear'); print qq| *************** *** 9,26 **** * Welcome to the Koha Installer * ********************************** ! This installer will prompt you with a series of questions. ! It assumes you (or your system administrator) has installed: ! * Apache (http://httpd.apache.org/) ! * Perl (http://www.perl.org) ! ! and one of the following database applications: ! * MySql (http://www.mysql.org) ! ! on some type of Unix or Unix-like operating system ! ! Are Apache, Perl, and a database from the list above installed ! on this system? (Y/[N]): |; --- 14,26 ---- * Welcome to the Koha Installer * ********************************** + Welcome to the Koha install script! This script will prompt you for some + basic information about your desired setup, then install Koha according to + your specifications. To accept the default value for any question, simply hit + Enter at the prompt. ! Please be sure to read the documentation, or visit the Koha website at ! http://www.koha.org for more information. ! Are you ready to begin the installation? (Y/[N]): |; *************** *** 43,50 **** print "\n"; - # ! # Test for Perl - Do we need to explicity check versions? # print "\nChecking perl modules ...\n"; unless (eval "require 5.004") { --- 43,56 ---- print "\n"; # ! # Test for Perl and Modules # + print qq| + + PERL & MODULES + ============== + + |; + print "\nChecking perl modules ...\n"; unless (eval "require 5.004") { *************** *** 52,63 **** } - # - # Test for Perl Dependancies - # my @missing = (); ! unless (eval require DBI) { push @missing,"DBI" }; ! unless (eval require Date::Manip) { push @missing,"Date::Manip" }; ! unless (eval require DBD::mysql) { push @missing,"DBD::mysql" }; ! unless (eval require Set::Scalar) { push @missing,"Set::Scalar" }; # --- 58,66 ---- } my @missing = (); ! unless (eval {require DBI}) { push @missing,"DBI" }; ! unless (eval {require Date::Manip}) { push @missing,"Date::Manip" }; ! unless (eval {require DBD::mysql}) { push @missing,"DBD::mysql" }; ! unless (eval {require Set::Scalar}) { push @missing,"Set::Scalar" }; # *************** *** 67,71 **** print "\n\n"; print "You are missing some Perl modules which are required by Koha.\n"; ! print "Once these modules have been installed, rerun this installery.\n"; print "They can be installed by running (as root) the following:\n"; foreach my $module (@missing) { --- 70,74 ---- print "\n\n"; print "You are missing some Perl modules which are required by Koha.\n"; ! print "Once these modules have been installed, rerun this installer.\n"; print "They can be installed by running (as root) the following:\n"; foreach my $module (@missing) { *************** *** 78,215 **** print "\n"; ! print "Testing for mysql - still to be done\n"; ! #test for MySQL? ! #print "Are you using MySql?(Y/[N]): "; ! #$answer = $_; ! #chomp $answer ! #if ($answer eq "Y" || $answer eq "y") { ! # FIXME ! # there is no $password or $KohaDBNAME yet ! # system("mysqladmin -uroot -p$password create $KohaDBNAME "); ! # system("mysql -u$root -p$password "); ! #need to get to mysql prompt HOW DO I DO THIS? ! ! # FIXME ! # you could pipe this into mysql in the shell that system generates ! # can this be done from dbi? ! # system("grant all privileges on Koha.* to koha at localhost identified by 'kohapassword'; "); ! #} else { ! # print qq| ! #You will need to use the MySQL database system for your application. ! #The installer currently does not support an automated setup with this database. ! #|; ! # }; ! print "\n"; ! # ! # FIXME ! # there is no updatedatabase program yet ! # ! #system ("perl updatedatabase -I /pathtoC4 "); # #KOHA conf # print qq| ! Koha uses a small configuration file that is usually placed in your ! /etc/ files directory (although you can technically place ! it anywhere you wish). ! ! Please enter the full path to your configuration files ! directory (the default Koha conf file is "koha.conf"). ! The path is usually something like /etc/ by default. The ! configuration file, will be created here. |; #Get the path to the koha.conf directory ! my $conf_path; ! my $dbname; ! my $hostname; ! my $user; ! my $pass; ! my $inc_path; ! do { ! print "Enter path:"; ! chomp($conf_path = ); ! print "$conf_path is not a directory.\n" if !-d $conf_path; ! } until -d $conf_path; - print "\n"; - print "\n"; - print qq| - Please provide the name of the mysql database for koha. - This is normally "Koha". - |; #Get the database name ! do { ! print "Enter database name:"; ! chomp($dbname = ); ! }; - print "\n"; - print "\n"; - print qq| - Please provide the hostname for mysql. Unless the database is located - on another machine this is likely to be "localhost". |; ! #Get the hostname for the database ! do { ! print "Enter hostname:"; ! chomp($hostname = ); ! }; ! print "\n"; ! print "\n"; print qq| ! Please provide the name of the user, who has full administrative ! rights to the $dbname database, when authenicating from $hostname. |; ! #Get the username for the database ! do { ! print "Enter username:"; ! chomp($user = ); ! }; ! print "\n"; ! print "\n"; print qq| ! Please provide the password for the user $user. |; ! #Get the password for the database user ! do { ! print "Enter password:"; ! chomp($pass = ); ! }; ! print "\n"; ! print "\n"; print qq| ! Please provide the full path to your Koha OPAC installation. ! Usually /usr/local/www/koha/htdocs |; ! #Get the installation path for OPAC ! do { ! print "Enter installation path:"; ! chomp($inc_path = ); ! }; #Create the configuration file ! # FIXME ! # maybe this should warn instead of dieing, and write to stdout if ! # the config file can't be opened for writing ! # ! open(SITES,">$conf_path/koha.conf") or die "Couldn't create file ! at $conf_path. Must have write capability.\n"; print SITES <); ! ! if ($input) { ! $opacdir = $input; ! } ! ! ! print qq| ! ! INTRANET/LIBRARIANS DIRECTORY ! ============================= ! Please supply the directory you want Koha to store its Intranet/Librarians files ! in. Leave off the trailing slash. This directory will be auto-created for you if ! it doesn't exist. ! ! Usually $kohadir ! |; ! ! print "Enter directory: "; ! chomp($input = ); ! ! if ($input) { ! $kohadir = $input; ! } # #KOHA conf # + my $etcdir = '/etc'; + my $dbname = 'koha'; + my $hostname = 'localhost'; + my $user = 'kohaadmin'; + my $pass = ''; + print qq| ! ! KOHA.CONF ! ========= ! Koha uses a small configuration file that is usually placed in your /etc/ files ! directory. The configuration file, will be created in this directory ! |; #Get the path to the koha.conf directory ! print "Enter the path to your [$etcdir]: "; ! chomp($input = ); + if ($input) { + $etcdir = $input; + } #Get the database name ! print qq| + Please provide the name of the mysql database for your koha installation. + This is normally "$dbname". |; ! print "Enter database name:"; ! chomp($input = ); + if ($input) { + $dbname = $input; + } ! ! #Get the hostname for the database print qq| ! ! Please provide the hostname for mysql. Unless the database is located on another ! machine this will be "localhost". |; ! print "Enter hostname:"; ! chomp($input = ); + if ($input) { + $hostname = $input; + } ! #Get the username for the database print qq| ! ! Please provide the name of the user, who will full administrative rights to the ! $dbname database, when authenticating from $hostname. ! ! If no user is entered it will default to $user. |; ! print "Enter username:"; ! chomp($input = ); + if ($input) { + $user = $input; + } ! #Get the password for the database user print qq| ! ! Please provide a good password for the user $user. |; ! print "Enter password:"; ! chomp($input = ); ! ! if ($input) { ! $pass = $input; ! } ! ! print "\n"; #Create the configuration file ! open(SITES,">$etcdir/koha.conf") or warn "Couldn't create file ! at $etcdir. Must have write capability.\n"; print SITES <); ! }; # # Set ownership of the koha.conf file for security - # FIXME - this will only work if run as root. # ! ! chown((getpwnam($apache_owner)) [2,3], "$conf_path/koha.conf") or die "can't chown koha.conf: $!"; ! ! print "\n"; ! print "\n"; # #SETUP opac # ! my $apache_conf_path; ! my $svr_admin; ! my $docu_root; ! my $svr_name; print qq| Koha needs to setup your Apache configuration file for the OPAC virtual host. ! Please enter the filename and path to your Apache Configuration file ! usually located in \"/usr/local/apache/conf/httpd.conf\". |; - do { - print "Enter path:"; - chomp($apache_conf_path = ); - print "$conf_path is not a valid file.\n" if !-f $apache_conf_path; - } until -f $apache_conf_path; ! print qq| ! Please enter the servername for your OPAC. ! Usually opac.your.domain ! |; ! do { ! print "Enter servername address:"; ! chomp($svr_name = ); ! }; print qq| ! Please enter the e-mail address for your webserver admin. ! Usually webmaster\@your.domain |; ! do { ! print "Enter e-mail address:"; ! chomp($svr_admin = ); ! }; print qq| ! Please enter the full path to your OPAC\'s document root. ! usually something like \"/usr/local/www/opac/htdocs\". |; ! do { ! print "Enter Document Roots Path:"; ! chomp($docu_root = ); ! }; --- 226,307 ---- print "Successfully created the Koha configuration file.\n"; ! my $httpduser; ! my $realhttpdconf; + foreach my $httpdconf (qw(/usr/local/apache/conf/httpd.conf + /usr/local/etc/apache/httpd.conf + /usr/local/etc/apache/apache.conf + /var/www/conf/httpd.conf + /etc/apache/conf/httpd.conf + /etc/apache/conf/apache.conf + /etc/httpd/conf/httpd.conf + /etc/httpd/httpd.conf)) { + if ( -f $httpdconf ) { + $realhttpdconf=$httpdconf; + open (HTTPDCONF, $httpdconf) or warn "Insufficient privileges to open $httpdconf for reading.\n"; + while () { + if (/^\s*User\s+"?([-\w]+)"?\s*$/) { + $httpduser = $1; + } + } + close(HTTPDCONF); + } + } + $httpduser ||= 'Undetermined'; # # Set ownership of the koha.conf file for security # ! chown((getpwnam($httpduser)) [2,3], "$etcdir/koha.conf") or warn "can't chown koha.conf: $!"; # #SETUP opac # ! my $svr_admin = 'webmaster@$domainname'; ! my $opac_svr_name = 'opac.$domainname'; ! my $koha_svr_name = 'koha.$domainname'; print qq| + + OPAC and KOHA/LIBRARIAN CONFIGURATION + ===================================== Koha needs to setup your Apache configuration file for the OPAC virtual host. ! Please enter the e-mail address for your webserver admin. ! Usually $svr_admin |; + print "Enter e-mail address:"; + chomp($input = ); ! if ($input) { ! $svr_admin = $input; ! } print qq| ! ! Please enter the servername for your OPAC interface. ! Usually $opac_svr_name |; ! print "Enter servername address:"; ! chomp($input = ); + if ($input) { + $opac_svr_name = $input; + } print qq| ! ! Please enter the servername for your Intranet/Librarian interface. ! Usually $koha_svr_name |; ! print "Enter servername address:"; ! chomp($input = ); ! ! if ($input) { ! $koha_svr_name = $input; ! } *************** *** 303,344 **** # Update Apache Conf File. # ! # FIXME ! # maybe this should warn instead of dieing, and write to stdout if ! # the config file can't be opened for writing ! # ! open(SITES,">>$apache_conf_path") or die "Couldn't write to file ! $conf_path. Must have write capability.\n"; ! print SITES < ! ServerAdmin $svr_admin ! DocumentRoot $docu_root ! ServerName $svr_name ! ErrorLog logs/opac-error_log ! TransferLog logs/opac-access_log common EOP ; ! close(SITES); ! print "Successfully updated Apache Configuration file.\n"; - - ###RESTART APACHE - # FIXME - # this is a pretty rude thing to do on a system ... - # perhaps asking the user first would be better. - # - #system('/etc/rc.d/init.d/httpd restart'); - # ! # It is completed # ! print "\nCongratulations ... your Koha installation is complete!\n"; ! print "\nYou will need to restart your webserver before using Koha!\n"; --- 309,475 ---- # Update Apache Conf File. # ! print qq| ! UPDATING APACHE.CONF ! ==================== ! ! |; ! open(SITE,">>$realhttpdconf") or warn "Insufficient priveleges to open $realhttpdconf for writing.\n"; ! print SITE < ! ServerAdmin $svr_admin ! DocumentRoot $opacdir/htdocs ! ServerName $opac_svr_name ! ScriptAlias /cgi-bin/ $opacdir/cgi-bin ! ErrorLog logs/opac-error_log ! TransferLog logs/opac-access_log common ! SetEnv PERL5LIB "$kohadir/modules" ! ! ! ! ServerAdmin $svr_admin ! DocumentRoot $kohadir/htdocs ! ServerName $koha_svr_name ! ScriptAlias /cgi-bin/ "$kohadir/cgi-bin" ! ErrorLog logs/koha-error_log ! TransferLog logs/koha-access_log common ! SetEnv PERL5LIB "$kohadir/modules" EOP ; ! close(SITE); print "Successfully updated Apache Configuration file.\n"; # ! # Setup the modules directory # ! print qq| + CREATING REQUIRED DIRECTORIES + ============================= + |; + unless ( -d $kohadir ) { + print "Creating $kohadir...\n"; + mkdir ($kohadir, oct(770)); + chown (oct(0), (getgrnam($httpduser))[2], "$kohadir"); + chmod (oct(770), "$kohadir"); + } + unless ( -d "$kohadir/htdocs" ) { + print "Creating $kohadir/htdocs...\n"; + mkdir ("$kohadir/htdocs", oct(750)); + } + unless ( -d "$kohadir/cgi-bin" ) { + print "Creating $kohadir/cgi-bin...\n"; + mkdir ("$kohadir/cgi-bin", oct(750)); + } + unless ( -d "$kohadir/modules" ) { + print "Creating $kohadir/modules...\n"; + mkdir ("$kohadir/modules", oct(750)); + } + unless ( -d $opacdir ) { + print "Creating $opacdir...\n"; + mkdir ($opacdir, oct(770)); + chown (oct(0), (getgrnam($httpduser))[2], "$opacdir"); + chmod (oct(770), "$opacdir"); + } + unless ( -d "$opacdir/htdocs" ) { + print "Creating $opacdir/htdocs...\n"; + mkdir ("$opacdir/htdocs", oct(750)); + } + unless ( -d "$opacdir/cgi-bin" ) { + print "Creating $opacdir/cgi-bin...\n"; + mkdir ("$opacdir/cgi-bin", oct(750)); + } + + + + print "\n\nINSTALLING KOHA...\n"; + print "\n\n==================\n"; + print "Copying internet-html files to $kohadir/htdocs...\n"; + system("cp -R intranet-html/* $kohadir/htdocs/"); + print "Copying intranet-cgi files to $kohadir/cgi-bin...\n"; + system("cp -R intranet-cgi/* $kohadir/cgi-bin/"); + print "Copying script files to $kohadir/modules...\n"; + system("cp -R modules/* $kohadir/modules/"); + print "Copying opac-html files to $opacdir/htdocs...\n"; + system("cp -R opac-html/* $opacdir/htdocs/"); + print "Copying opac-cgi files to $opacdir/cgi-bin...\n"; + system("cp -R opac-cgi/* $opacdir/cgi-bin/"); + + print qq| + + MYSQL CONFIGURATION + =================== + |; + my $mysql; + my $mysqldir; + my $mysqluser = 'root'; + my $mysqlpass = ''; + + foreach my $mysql (qw(/usr/local/mysql + /opt/mysql)) { + if ( -d $mysql ) { + $mysql=$mysqldir; + } + } + + print qq| + To allow us to create the koha database please supply the + mysql\'s root users password + |; + + print "Enter mysql\'s root users password: "; + chomp($input = ); + + if ($input) { + $mysqlpass = $input; + } + + + print qq| + + CREATING DATABASE + ================= + |; + system("$mysqldir/bin/mysqladmin -u$mysqluser -p$mysqlpass create $dbname"); + system("$mysqldir/bin/mysql -u$mysqluser -p$mysqlpass $dbname < koha.mysql"); + system("$mysqldir/bin/mysql -u$mysqluser -p$mysqlpass $dbname < koha.mysql"); + system("$mysqldir/bin/mysql -u$mysqluser -p$mysqlpass mysql -e \"insert into user (Host,User,Password) values ('$hostname','$user',password('$pass'))\"\;"); + system("$mysqldir/bin/mysql -u$mysqluser -p$mysqlpass mysql -e \"insert into db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv) values ('%','$dbname','$user','Y','Y','Y','Y');"); + system("$mysqldir/bin/mysqladmin -u$mysqluser -p$mysqlpass reload"); + + system ("perl scripts/updater/updatedatabase -I $kohadir/modules"); + + + #RESTART APACHE + system('clear'); + print qq| + COMPLETED + ========= + Congratulations ... your Koha installation is almost complete! + The final step is to restart your webserver. + + Be sure to read the INSTALL, and Hints files. + + For more information visit http://www.koha.org + + Would you like to restart your webserver now? (Y/[N]): + |; + my $restart = ; + chomp $restart; + + if ($answer eq "Y" || $answer eq "y") { + system('/etc/rc.d/init.d/httpd restart'); + } else { + print qq| + print "\nCongratulations ... your Koha installation is complete!\n"; + print "\nYou will need to restart your webserver before using Koha!\n"; + |; + exit; + }; From amillar at users.sourceforge.net Fri Jun 14 07:25:00 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Thu, 13 Jun 2002 22:25:00 -0700 Subject: [Koha-cvs] CVS: koha/updater updatedatabase,1.9,1.10 Message-ID: Update of /cvsroot/koha/koha/updater In directory usw-pr-cvs1:/tmp/cvs-serv4041/updater Modified Files: updatedatabase Log Message: add websites table Index: updatedatabase =================================================================== RCS file: /cvsroot/koha/koha/updater/updatedatabase,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** updatedatabase 21 May 2002 05:47:24 -0000 1.9 --- updatedatabase 14 Jun 2002 05:24:58 -0000 1.10 *************** *** 54,57 **** --- 54,63 ---- branchrelations=>"( branchcode varchar(4), categorycode varchar(4))", + websites=>"( websitenumber int(11) NOT NULL auto_increment, + biblionumber int(11) NOT NULL default '0', + title text, + description text, + url varchar(255), + PRIMARY KEY (websitenumber) )", ); From amillar at users.sourceforge.net Fri Jun 14 08:14:08 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Thu, 13 Jun 2002 23:14:08 -0700 Subject: [Koha-cvs] CVS: koha/C4 Database.pm,1.2.2.2,1.2.2.3 Message-ID: Update of /cvsroot/koha/koha/C4 In directory usw-pr-cvs1:/tmp/cvs-serv13796/C4 Modified Files: Tag: rel-1-2 Database.pm Log Message: Parameter check routine for DBI handle Index: Database.pm =================================================================== RCS file: /cvsroot/koha/koha/C4/Database.pm,v retrieving revision 1.2.2.2 retrieving revision 1.2.2.3 diff -C2 -r1.2.2.2 -r1.2.2.3 *** Database.pm 30 Apr 2002 09:30:52 -0000 1.2.2.2 --- Database.pm 14 Jun 2002 06:13:59 -0000 1.2.2.3 *************** *** 11,15 **** @ISA = qw(Exporter); ! @EXPORT = qw(&C4Connect); --- 11,17 ---- @ISA = qw(Exporter); ! @EXPORT = qw( ! &C4Connect &requireDBI ! ); *************** *** 39,43 **** my $dbh=DBI->connect("DBI:mysql:$database:$hostname",$user,$pass); return $dbh; ! } --- 41,60 ---- my $dbh=DBI->connect("DBI:mysql:$database:$hostname",$user,$pass); return $dbh; ! } # sub C4Connect ! ! #------------------ ! # Helper subroutine to make sure database handle was passed properly ! sub requireDBI { ! my ( ! $dbh, ! $subrname, # name of calling subroutine ! )=@_; ! ! unless ( ref($dbh) =~ /DBI::db/ ) { ! print "

    \nERROR: Subroutine $subrname called without proper DBI handle.\n" .
    ! 		"Please contact system administrator.\n
    \n"; ! die "ERROR: Subroutine $subrname called without proper DBI handle.\n"; ! } ! } # sub requireDBI From amillar at users.sourceforge.net Fri Jun 14 08:14:09 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Thu, 13 Jun 2002 23:14:09 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.20,1.6.2.21 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv13796/acqui.simple Modified Files: Tag: rel-1-2 marcimport.pl Log Message: Parameter check routine for DBI handle Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.20 retrieving revision 1.6.2.21 diff -C2 -r1.6.2.20 -r1.6.2.21 *** marcimport.pl 12 Jun 2002 22:33:59 -0000 1.6.2.20 --- marcimport.pl 14 Jun 2002 06:14:06 -0000 1.6.2.21 *************** *** 190,193 **** --- 190,195 ---- my $splitchar=chr(29); + requireDBI($dbh,"ProcessFile"); + print "Main Menu
    \n"; my $qisbn=$input->param('isbn'); *************** *** 413,416 **** --- 415,420 ---- my ($numrecords,$resultsid,$data,$startdate,$enddate); + requireDBI($dbh,"ListFileRecords"); + # File can be z3950 search query or uploaded MARC data *************** *** 513,517 **** for ($i=$startrecord; $i<$startrecord+10; $i++) { if ( $records[$i] ) { ! &PrintResultRecordLink($records[$i],$resultsid); } # if record } # for records --- 517,521 ---- for ($i=$startrecord; $i<$startrecord+10; $i++) { if ( $records[$i] ) { ! &PrintResultRecordLink($dbh,$records[$i],$resultsid); } # if record } # for records *************** *** 533,537 **** foreach $record (@records) { ! &PrintResultRecordLink($record,''); } # foreach record --- 537,541 ---- foreach $record (@records) { ! &PrintResultRecordLink($dbh,$record,''); } # foreach record *************** *** 552,555 **** --- 556,561 ---- #---- + requireDBI($dbh,"z3950servername"); + my $sti=$dbh->prepare("select name from z3950servers *************** *** 567,571 **** sub PrintResultRecordLink { use strict; ! my ($record,$resultsid)=@_; # input my ( --- 573,577 ---- sub PrintResultRecordLink { use strict; ! my ($dbh,$record,$resultsid)=@_; # input my ( *************** *** 577,580 **** --- 583,587 ---- ); + requireDBI($dbh,"PrintResultRecordLink"); $bib=extractmarcfields($record); *************** *** 792,795 **** --- 799,804 ---- ); + requireDBI($dbh,"z3950menu"); + print "Main Menu
    \n"; print "
    \n"; *************** *** 918,921 **** --- 927,934 ---- sub uploadmarc { use strict; + my ($dbh)=@_; + + requireDBI($dbh,"uploadmarc"); + print "Main Menu
    \n"; my $sth=$dbh->prepare("select id,name from uploadedmarc"); *************** *** 1072,1075 **** --- 1085,1090 ---- my @serverlist; + requireDBI($dbh,"AcceptZ3950Queue"); + my $query=$input->param('query'); *************** *** 1107,1110 **** --- 1122,1127 ---- )=@_; + requireDBI($dbh,"AcceptMarcUpload"); + my $name=$input->param('name'); my $data=$input->param('uploadmarc'); *************** *** 1135,1140 **** my $biblionumber=0; my $biblioitemnumber=0; - my $sth; my $isbn=$input->param('isbn'); my $issn=$input->param('issn'); --- 1152,1159 ---- my $biblionumber=0; my $biblioitemnumber=0; my $sth; + + requireDBI($dbh,"AcceptBiblioitem"); + my $isbn=$input->param('isbn'); my $issn=$input->param('issn'); *************** *** 1258,1261 **** --- 1277,1281 ---- my $sth; my $barcode; + requireDBI($dbh,"ItemCopyForm"); my $title=$input->param('title'); *************** *** 1311,1314 **** --- 1331,1337 ---- my $error; + + requireDBI($dbh,"AcceptItemCopy"); + my $barcode=$input->param('barcode'); my $replacementprice=($input->param('replacementprice') || 0); *************** *** 1364,1367 **** --- 1387,1392 ---- my $debug=0; + requireDBI($dbh,"getkeytableselectoptions"); + if ( $showkey ) { $orderfieldname=$keyfieldname; *************** *** 1403,1406 **** --- 1428,1432 ---- #-------- + requireDBI($dbh,"newcompletebiblioitem"); print "
    Trying to add biblio item Title=$biblio->{title} " .
    ***************
    *** 1460,1463 ****
    --- 1486,1491 ----
      	
      	#-----
    +     	requireDBI($dbh,"getoraddbiblio");
    + 
      	print "
    Looking for biblio 
    \n" if $debug; $sth=$dbh->prepare("select biblionumber *************** *** 1505,1508 **** --- 1533,1538 ---- $failed, ); + + requireDBI($dbh,"addz3950queue"); # list of servers: entry can be a fully qualified URL-type entry From amillar at users.sourceforge.net Fri Jun 14 08:28:16 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Thu, 13 Jun 2002 23:28:16 -0700 Subject: [Koha-cvs] CVS: koha/C4 Input.pm,1.1.1.1.2.1,1.1.1.1.2.2 Message-ID: Update of /cvsroot/koha/koha/C4 In directory usw-pr-cvs1:/tmp/cvs-serv17073/C4 Modified Files: Tag: rel-1-2 Input.pm Log Message: Move checkvalidisbn subroutine to Input.pm Index: Input.pm =================================================================== RCS file: /cvsroot/koha/koha/C4/Input.pm,v retrieving revision 1.1.1.1.2.1 retrieving revision 1.1.1.1.2.2 diff -C2 -r1.1.1.1.2.1 -r1.1.1.1.2.2 *** Input.pm 25 Apr 2002 21:59:55 -0000 1.1.1.1.2.1 --- Input.pm 14 Jun 2002 06:28:14 -0000 1.1.1.1.2.2 *************** *** 10,14 **** @ISA = qw(Exporter); ! @EXPORT = qw(&checkflds &checkdigit); sub checkflds { --- 10,16 ---- @ISA = qw(Exporter); ! @EXPORT = qw( ! &checkflds &checkdigit &checkvalidisbn ! ); sub checkflds { *************** *** 50,55 **** } return $valid; ! } END { } # module clean-up code here (global destructor) - --- 52,93 ---- } return $valid; ! } # sub checkdigit ! ! #-------------------------------------- ! # Determine if a number is a valid ISBN number, according to length ! # of 10 digits and valid checksum ! sub checkvalidisbn { ! use strict; ! my ($q)=@_ ; # Input: ISBN number ! ! my $isbngood = 0; # Return: true or false ! ! $q=~s/x$/X/g; # upshift lower case X ! $q=~s/[^X\d]//g; ! $q=~s/X.//g; ! if (length($q)==10) { ! my $checksum=substr($q,9,1); ! my $isbn=substr($q,0,9); ! my $i; ! my $c=0; ! for ($i=0; $i<9; $i++) { ! my $digit=substr($q,$i,1); ! $c+=$digit*(10-$i); ! } ! $c=int(11-($c/11-int($c/11))*11+.1); ! ($c==10) && ($c='X'); ! if ($c eq $checksum) { ! $isbngood=1; ! } else { ! $isbngood=0; ! } ! } else { ! $isbngood=0; ! } # if length good ! ! return $isbngood; ! ! } # sub checkvalidisbn ! END { } # module clean-up code here (global destructor) From amillar at users.sourceforge.net Fri Jun 14 08:28:17 2002 From: amillar at users.sourceforge.net (Alan Millar) Date: Thu, 13 Jun 2002 23:28:17 -0700 Subject: [Koha-cvs] CVS: koha/acqui.simple marcimport.pl,1.6.2.21,1.6.2.22 Message-ID: Update of /cvsroot/koha/koha/acqui.simple In directory usw-pr-cvs1:/tmp/cvs-serv17073/acqui.simple Modified Files: Tag: rel-1-2 marcimport.pl Log Message: Move checkvalidisbn subroutine to Input.pm Index: marcimport.pl =================================================================== RCS file: /cvsroot/koha/koha/acqui.simple/marcimport.pl,v retrieving revision 1.6.2.21 retrieving revision 1.6.2.22 diff -C2 -r1.6.2.21 -r1.6.2.22 *** marcimport.pl 14 Jun 2002 06:14:06 -0000 1.6.2.21 --- marcimport.pl 14 Jun 2002 06:28:14 -0000 1.6.2.22 *************** *** 18,21 **** --- 18,22 ---- use C4::Acquisitions; use C4::Output; + use C4::Input; #------------------ *************** *** 1571,1608 **** #-------------------------------------- - sub checkvalidisbn { - use strict; - my ($q)=@_ ; - - my $isbngood = 0; - - $q=~s/x$/X/g; # upshift lower case X - $q=~s/[^X\d]//g; - $q=~s/X.//g; - if (length($q)==10) { - my $checksum=substr($q,9,1); - my $isbn=substr($q,0,9); - my $i; - my $c=0; - for ($i=0; $i<9; $i++) { - my $digit=substr($q,$i,1); - $c+=$digit*(10-$i); - } - $c=int(11-($c/11-int($c/11))*11+.1); - ($c==10) && ($c='X'); - if ($c eq $checksum) { - $isbngood=1; - } else { - $isbngood=0; - } - } else { - $isbngood=0; - } # if length good - - return $isbngood; - - } # sub checkvalidisbn - - #------------------------- sub FormatMarcText { use strict; --- 1572,1575 ---- From rangi at users.sourceforge.net Fri Jun 14 12:47:31 2002 From: rangi at users.sourceforge.net (Chris Cormack) Date: Fri, 14 Jun 2002 03:47:31 -0700 Subject: [Koha-cvs] CVS: koha installer.pl,1.2.2.13,1.2.2.14 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv31442 Modified Files: Tag: rel-1-2 installer.pl Log Message: Set the mysqldir to default to /usr if no other mysql dir is found, this means /usr/bin/mysql etc will work Index: installer.pl =================================================================== RCS file: /cvsroot/koha/koha/installer.pl,v retrieving revision 1.2.2.13 retrieving revision 1.2.2.14 diff -C2 -r1.2.2.13 -r1.2.2.14 *** installer.pl 14 Jun 2002 05:07:37 -0000 1.2.2.13 --- installer.pl 14 Jun 2002 10:47:29 -0000 1.2.2.14 *************** *** 418,422 **** } } ! print qq| To allow us to create the koha database please supply the --- 418,424 ---- } } ! if (!$mysqldir){ ! $mysqldir='/usr'; ! } print qq| To allow us to create the koha database please supply the From rangi at users.sourceforge.net Fri Jun 14 13:45:52 2002 From: rangi at users.sourceforge.net (Chris Cormack) Date: Fri, 14 Jun 2002 04:45:52 -0700 Subject: [Koha-cvs] CVS: koha installer.pl,1.2.2.14,1.2.2.15 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/cvs-serv24040 Modified Files: Tag: rel-1-2 installer.pl Log Message: Removing duplicate line Index: installer.pl =================================================================== RCS file: /cvsroot/koha/koha/installer.pl,v retrieving revision 1.2.2.14 retrieving revision 1.2.2.15 diff -C2 -r1.2.2.14 -r1.2.2.15 *** installer.pl 14 Jun 2002 10:47:29 -0000 1.2.2.14 --- installer.pl 14 Jun 2002 11:45:49 -0000 1.2.2.15 *************** *** 441,445 **** system("$mysqldir/bin/mysqladmin -u$mysqluser -p$mysqlpass create $dbname"); system("$mysqldir/bin/mysql -u$mysqluser -p$mysqlpass $dbname < koha.mysql"); - system("$mysqldir/bin/mysql -u$mysqluser -p$mysqlpass $dbname < koha.mysql"); system("$mysqldir/bin/mysql -u$mysqluser -p$mysqlpass mysql -e \"insert into user (Host,User,Password) values ('$hostname','$user',password('$pass'))\"\;"); system("$mysqldir/bin/mysql -u$mysqluser -p$mysqlpass mysql -e \"insert into db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv) values ('%','$dbname','$user','Y','Y','Y','Y');"); --- 441,444 ---- From rangi at users.sourceforge.net Fri Jun 14 13:57:38 2002 From: rangi at users.sourceforge.net (Chris Cormack) Date: Fri, 14 Jun 2002 04:57:38 -0700 Subject: [Koha-cvs] CVS: koha INSTALL,1.1.2.6,1.1.2.7 Message-ID: Update of /cvsroot/koha/koha In directory usw-pr-cvs1:/tmp/