ELF44 (444444^^Ԃ__HHHDDQtdRtd^^/lib/ld-linux.so.2GNUGNU^mFtԉiңRHuvz}"$ k6:?DMoG n/3L&%rstwy{~ NPQR!Ve[^bI(lO,025;<) UY\acijJq_x|mCB4- .pZ1T>98*hE7K'g+WXA`F] #=@dfSa* D?D0I4@P  4 *-147<?BEFGHIKLMNPQRSUWZ\_cdfjklmopqrstvx{~D "1NW1N.1hsD "1NW1N.1hsX1N۹1Nۺ1NX1N11hs : 1NK01hs[1NZ1N21hs1N21hs\1NkY"kY51hs51hs71hs71hsgf G-G`dʼnt1NCEu1Nw1Nw1NN1hsy1NP1hsy1Nz1NۦݣkQ1hsR1hs{1NR1hs8}1N T1hs}1NU1hsV1hsl`2bV1hsY1hsKqX|!g1W/eW/e1Nۗ1Nۖ1N 1hs1hs1Np1hs1N1hs1Np1hs1hs1N1hsĹ@s1hs1hs1Ns1hs1hst1hs1N۞1N۲ot1hs1hs1hsw1hs1hsk CY~k|e= "? "> "IA "R1NA "nT1NC ".ś1NT1NC "V  4tgjo,>wcdSIZOE``1u6` 1u a`P1u} 1u-a 1u1u ;1u h 1ufa5` `1u `Ya` 1u R 1uaA%I"\ a 1u1upGAN$aA(a,at0aF0~! >q`a! =1u|a2`1uk'1u^1u4a 1u8aa`1uS1ua!n4711ύ:n118n11n11nˉ 11n$ 11ލ2n։(11n,118n011n411nˉ811n< 11ލ2n։@11nD118nH11nL11n P11TnƉ !! ֋X2ܼΉ Ɖ!! \7ܼ߉ ω؉!! Nj`8ܼ׉ ߉!! ϋd9ܼ  ׉!! ߋh;ܼlj !! ׋l:ܼω lj!! >ܼp47 ω!! Njt8ܼ׉ ߉!! ϋx9ܼ  ׉!! ߋ|;ܼlj !! ׋u:ܼω lj!! >ܼE47߉ ω!! NjM8ܼ׉ ߉!! ϋ]9ܼ  ׉!! ߋU;ܼlj !! ׋u:ܼω lj!! E>ܼ47߉ ω!! NjM8ܼ׉ ߉!! ϋ]9ܼω񉝤 щ!! ًU ܼÉ11bӉu11bʉE11ލ0bʉƉ}11bʉM119bʉ]11 bʉU 11bʉӉu11bʉEč11ލ0bʉƉ}11bʉM̍119bʉ]Љ11 bʉUԍ 11bʉӉu11bʉE܍11ލ0bʉƉ}11bʉM119bʉ] 11Ǎ;bʉU11ύ:bʉ׋Ubʉ11ڍ򋵬~^N FP[^_]Í'U8]Éu}Uu1]u}]ÐaEt<=t]tW<=tu)ڋE0t]ljӍ&E\$4$D$]u<=t7uf농1뵍t&+}E8DfUxatÍUtt<0xaÐ1UVS]Ea҉Puډuۃ[^]Ít&UWVS1<Ӏ:=É$Uljt1$En1ɋU9u  u<1[^_]áa1ҹ8t& u =at.L$$UaU<[^_]É $aUCUЅtՍEԉD$a $D$MhM̉ aUDU=҉u ft=vu)UԍD8a$UUЅJU䡄a҈t$=t =t&t҈u=1f LuEEME31dUWV0eE1@ủEҡDE֡HEڡLEޡPETEXE\E`fEukaWMC9/% t ¸!t ¸0;t5¸gEe3uN0^_]Í&Kdt¸fu\ uUt&'UWVSu ]}4$<$EUD$Q|$t$D$ iD$D$$ED$$D$trD$D$A$pt Ĝ[^_] D$D$ED$GD$D$ a$Ĝ1[^_]ÍU9Uu랐UWyVSoluEyEoE|ErEwE*E$UD$t:;t-߃ÍUt8uNjU;uӃl[^_]ËM $uEġG$eU$EWMEEčLEȉ$UD$ D$D$T$G $MD$ED$MM6&UWVSt8uĜ[^_]Í$htf4$xX@99<$s$EhUD$E\$|$D$ iD$D$$ED$E$D$$tE%=@E$E$v4$64$<$PĜ[^_]Ðt&S:vC: C:vErt&'USÃtED$\$$HuE%=t=@tt1[]Í$D$t[]Ív'U $1tÐUVS]ta;t\$D95G8t Z8uP9r9؍vuV:u[^]mt&$tf.[^]Ít&8t9r9؍vt9s:t1)ڍJwD$ T$\$$aa똍v$<1tf.u5G0t&UWVSu4$ljÄt+GWt& t8u Ӄu!tt>tD$$9t[^_]Ã[^_]:v'UWVS쬀EeU1ҍu tG\$Njt$*t1tUe3tĬ[^_]Ët$4$pGD$tppv>utt$<$>4$.T:ufJB: tp=7t\$t$D$ T$D$D$$T$D$$u%=t@G$T$ƅfG$D$؍D$$u}$'tV UWVSLE@eU1҉Dž$~Dž(Dž,Dž0Dž 0Dž)DžDžDžDž Dž4Dž8Dž<Kt 8Ct(t&Yu_u荝0v8t`t܉<$ftΉlj<$Ë$$~~$É~ G|$D$T$L$D$ D$D$$D$<$r$~D$$$~~~>p>>HHHDDQtdRtd>>/lib/ld-linux.so.2GNUGNU\(AI V at DHGK\>9LY1aUkmi,*efIg pRsNqQnh(P:[5AF?#0 2)T]l<`M;4@VdE_C='ObWXj&$/%c! B3.r^JZ"o6+S7 -8%O%@@O()82G OQSUVWXYZ\]^_bcefhjlnoqղqYG-Iݣk/ś_{k C : Gʼn !oĹ@k|nqX|d|K2b ff{JkGCE}A?," l`xz ~n/ ,H 5:/4]qA\WN`B2P$FCTcANAx ` н  \`A! ApZV[0,@A.@A QLA[`A!` DZ`AU  yTAQ $20j >rTAe0\9p>PAdA(; libperl.so.5.10__gmon_start___Jv_RegisterClassesPerl_sys_termPerl_Istatbuf_ptrPerl_sys_init3Perl_Iexit_flags_ptrPerl_save_destructor_xPerl_Icompcv_ptrPerl_atfork_lockPerl_Icurstackinfo_ptrperl_constructPerl_croak_nocontextPerl_Iparser_ptrPerl_av_shiftPerl_sv_2pv_flagsPerl_Itop_env_ptrPerl_Itainted_ptrPerl_sv_setpvnPerl_newSVpvPerl_newXS_flagsPerl_Iin_eval_ptrPerl_Iop_ptrPerl_Ieval_root_ptrperl_freePerl_mg_setPerl_atfork_unlockPerl_sv_setpvPerl_Gthr_key_ptrPerl_Gdo_undump_ptrPerl_Iperl_destruct_level_ptrPerl_gv_fetchpvperl_runPerl_dounwindPerl_newXSperl_destructPerl_av_fetchboot_DynaLoaderperl_parsePerl_safesysmallocperl_allocPL_memory_wraplibdl.so.2libm.so.6libpthread.so.0pthread_getspecificcloseopen64__errno_locationlseek64readlibc.so.6_IO_stdin_used__register_atforkexitstrncmp__strdupclosedir__stack_chk_failunlinkmkdirreallocmemchrgetpidstrtokstrlenmemsetstrstrrmdirmemcpy__strncpy_chk__lxstat64opendir__xstat64__ctype_b_locgetuidreadlinkexecvp__memcpy_chkreaddir64__sprintf_chkmemmoveaccessstrcmp__libc_start_main__environlibcrypt.so.1_edata__bss_start_endpar_current_execpar_basename__libc_csu_fini_fp_hwXS_Internals_PAR_BOOTpar_env_cleanpar_current_exec_procpar_dirnameget_username_from_getpwuidpar_cleanup__data_startxs_init__libc_csu_initname_load_my_par_plXS_Internals_PAR_CLEARSTACKsize_load_my_par_plpar_mktmpdirpar_setup_libpathpar_findprogpar_init_envGLIBC_2.4GLIBC_2.3GLIBC_2.3.2GLIBC_2.2GLIBC_2.3.4GLIBC_2.0 pii ii ri ii ti ii ii ii ?`A`dAq@@@ @@@@@O @$@ (@ ,@ 0@ 4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@|@ @!@"@#@k@X@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>A?A@AA ABACADAEAF AG$AH(AI,AJ0AK4AL8AM>9s|A>|A9rxA[]Ít&'U>tt $>ÐUVuSt)8V  t8u Ѓu[^]fU1҉WVSP ȉ ؉ ؁ ȉu΍M萍t&B33B3BB 9u苅щArzR yZ!! ؋!! ؋yZyZω!! !! 7yZ;yZÉӉ!! !lj! yZ:yZ!! !! yZljyZ։!! !! 󋵤yZ1yZ!! !! 򋵤yZ։yZω!! !! yZljyZӉ!! !! ً yZˉyZƉ!! !! 򋵤yZ։yZω!! !ω! yZ11;n11Ǎ9n 11ߍ>n4711ύ:n118n11n11nˉ 11n$ 11ލ2n։(11n,118n011n411nˉ811n< 11ލ2n։@11nD118nH11nL11n P11TnƉ !! ֋X2ܼΉ Ɖ!! \7ܼ߉ ω؉!! Nj`8ܼ׉ ߉!! ϋd9ܼ  ׉!! ߋh;ܼlj !! ׋l:ܼω lj!! >ܼp47 ω!! Njt8ܼ׉ ߉!! ϋx9ܼ  ׉!! ߋ|;ܼlj !! ׋u:ܼω lj!! >ܼE47߉ ω!! NjM8ܼ׉ ߉!! ϋ]9ܼ  ׉!! ߋU;ܼlj !! ׋u:ܼω lj!! E>ܼ47߉ ω!! NjM8ܼ׉ ߉!! ϋ]9ܼω񉝤 щ!! ًU ܼÉ11bӉu11bʉE11ލ0bʉƉ}11bʉM119bʉ]11 bʉU 11bʉӉu11bʉEč11ލ0bʉƉ}11bʉM̍119bʉ]Љ11 bʉUԍ 11bʉӉu11bʉE܍11ލ0bʉƉ}11bʉM119bʉ] 11Ǎ;bʉU11ύ:bʉ׋Ubʉ11ڍ򋵬~^N FP[^_]Í'U8]Éu}Uu1]u}]Ð`AEt<=t]tW<=tu)ڋE0t]ljӍ&E\$4$D$u<=t7uf농1뵍t&+}E8DfUU2UHAtÍ(tt<0HAÍt&1UVS]E`A҉Puډuۃ[^]Ít&UH}]ӉueE1D$|$$2-~w@tbt$D$/<$vtR$$t$ |$\$$Ee3uJ]u}]Í&t$t$Z\$T$$-'U$.$D$$T$$D$D$$FÍt&US$$$KX$$$C$$l$X$c$I$@f%fC$7$$X$$D$D$$rC$$$aX$$$C $$$X$z$`$x1ҋt#$T$:$RPlS$$.$$@@($$$@@,$$$XX$$$uC0[]Ív'UWVSt8uĜ[^_]Í$tf4$@XB@9A9<$;$E0UD$E\$|$D$ DD$D$$fED$E$D$tE%=@E$E$4$v64$<$XĜ[^_]Ðt&S:CvC:B C:CvErt&'USÃ$$$\$$D$t 1[]Ð$$$@%=@t-$$e$@%=u$D$[]UH ]eE1u}D$=D$ JD$D$$D$|y 1ۋUe3uW]u}]ÍvD$|$$x@$]tt$|$$3\U$t&UWVS1<Ӏ:=É$aUljt1$EF1ɋU9u  u<1[^_]á`A1ҹ8t& u =At.L$$U`AU<[^_]É $AUKUЅtՍEԉD$`A $D$MM̉ `AUDU=҉u ft=vu)UԍD8`A$UUЅJU`A҈t$=t =t&t҈u=1f LuEEME31dUW`VSVluE`EVEcEYE^E*E$UD$t:;t*߃É-t8uʋU;uփl[^_]ÍvM $Eġ<$U$EMEEčLEȉ$eUD$ {D$D$T$< $MD$ED$M6&UWV0eE1EҡE֡Eڡ Eޡ$E(E,E0E4fEphy^TJ@6,("t ¸lt ¸Rt.¸EEe3uG0^_]ø)t¸(t&u: uU(bt&'U$1tÐUVS]ta;t\$D9588t Z8uP9r9؍vuV:u[^]et&$tf.[^]Ít&8t9r9؍vt9s:t1)ڍJwD$ T$\$$AzA똍v$T1tf.u580t&UWVSu4$ljÄt+8Wt& t8u ӃuQtt>tD$G$9t[^_]Ã[^_]Zv'UVS8ED$E D$E$D$`D$`$0P$8u;Q$U$i$O$$1F$,$D$%$ $#U\$,T$(l$($Ju Q@L@@ O]Q~f L 9D$ Q\$D$D$$Ct=Q$ft:Q$8[^]Ðt&Q$벍&Qt $본 QtD$dA$S$UWVSLEeU1ҋu 8\$Nj$(t1Ue3L[^_]Ë$U4$<D$t>uBtt$<$4$T:ufJB: t=9\$t$D$ {T$D$D$$$i$O$wT$$D$mu-$-$$;@%=t$<$D$tD$$2u^$AUWVSLEeU1Dž(RDž,ZDž0BDž4DžDžDž_DžUDž gDž$Dž8kDž<pDž@t 8v+t"evYu_u荝v8tztމ4$t҉Ɖ4$<$v$~~$É~ 8|$D$Gt$L$D$ yD$D$${D$<$Y$D$$$~~~~>tu,~~ 8D::eu$D$$E(1D$D$ D$T$D$D$8$D$HV+8ua; 8D$ t$|$L$D$ D$D$D$$D$$t<$gڸ$Ue3~]L[^_]f,R v;t1҅t$tۉ\t&i<$~~Lt<1$~~$~&<kt&St$g8uݿcv^vD$ D$D$$HDD$T$ $Du ECkD$ D$D$$`DžD#EgDžHDžLܺDžPvT2DžTDžXDž\E~~t&DD$D$$~XD\9ʃ\\EXtV@)9~׍`D|$T$$E@E_D)D<9?1t&7`D7dD7hD7 lD7pD7tD7xD7|D7 ED7$ED7(ED7,ED70ED74ED78ED7<@ED;)?^@|:@)Ӊ|$`D$ D\$<$]]]t&~ $X\?Ƅ`88`)~L$D$$~EEEEEE1EDU}@ 0$$D$t$$C C @N$$D$ D$D$$(t?>C 8$]$Ct$|$$$7$$$$$4QD$$t t *,[^_]Ðt&wf$$UT$$9Q;v$d$J\$$xvQ8C 0$$Q$S=QQC 0F F |$$ƋC C tFC D$Qt$ $@D$D$ QD$Q$pD$$k$QD$ D$\$$$7$D$ D$t$$6U$$D$ D$ D$$fU($$$$$vD$D$D$ D$D$$&ÐUS2rPD$ ED$E D$E${[]Ë$ÐU]Ít&'UWVSyr')t$1ED$E D$E$9rރ[^_]ÐUS>t>fЋu[]ÐUS[q Y[PAR_CLEAN/proc/self/exe..%s/%s/proc/%i/%sLIBPATHDYLD_LIBRARY_PATHPERL5LIBPERLLIBPERL5OPTPERLIOPAR_INITIALIZEDPAR_SPAWNEDPAR_TEMPPAR_DEBUGPAR_CACHEPAR_PROGNAMEPAR_ARGCPAR_ARGV_0PAR_GLOBAL_DEBUGPAR_GLOBAL_TMPDIRPAR_TMPDIRPAR_GLOBAL_TEMPPAR_GLOBAL_CLEANPAR_CLEAN=1par--e--C:\TEMP/tmpTEMPDIRTMPUSERUSERNAME%s%s%s%sparl.par%s%scache-%s%s%02x%s%stemp-%u%s%s%stemp-%u-%u%sSYSTEMARGVperlperlxsi.cDynaLoader::boot_DynaLoaderInternals::PAR::BOOT/:__ENV_PAR_CLEAN__ %s: execution of %s failed - aborting with %i. %s: creation of private temporary subdirectory %s failed - aborting with %i. Apar.pl#!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if 0; # not running under some shell package __par_pl; # --- This script must not use any modules at compile time --- # use strict; #line 158 my ($par_temp, $progname, @tmpfile); END { if ($ENV{PAR_CLEAN}) { require File::Temp; require File::Basename; require File::Spec; my $topdir = File::Basename::dirname($par_temp); outs(qq{Removing files in "$par_temp"}); File::Find::finddepth(sub { ( -d ) ? rmdir : unlink }, $par_temp); rmdir $par_temp; # Don't remove topdir because this causes a race with other apps # that are trying to start. if (-d $par_temp && $^O ne 'MSWin32') { # Something went wrong unlinking the temporary directory. This # typically happens on platforms that disallow unlinking shared # libraries and executables that are in use. Unlink with a background # shell command so the files are no longer in use by this process. # Don't do anything on Windows because our parent process will # take care of cleaning things up. my $tmp = new File::Temp( TEMPLATE => 'tmpXXXXX', DIR => File::Basename::dirname($topdir), SUFFIX => '.cmd', UNLINK => 0, ); print $tmp "#!/bin/sh x=1; while [ \$x -lt 10 ]; do rm -rf '$par_temp' if [ \! -d '$par_temp' ]; then break fi sleep 1 x=`expr \$x + 1` done rm '" . $tmp->filename . "' "; chmod 0700,$tmp->filename; my $cmd = $tmp->filename . ' >/dev/null 2>&1 &'; close $tmp; system($cmd); outs(qq(Spawned background process to perform cleanup: ) . $tmp->filename); } } } BEGIN { Internals::PAR::BOOT() if defined &Internals::PAR::BOOT; eval { _par_init_env(); if (exists $ENV{PAR_ARGV_0} and $ENV{PAR_ARGV_0} ) { @ARGV = map $ENV{"PAR_ARGV_$_"}, (1 .. $ENV{PAR_ARGC} - 1); $0 = $ENV{PAR_ARGV_0}; } else { for (keys %ENV) { delete $ENV{$_} if /^PAR_ARGV_/; } } my $quiet = !$ENV{PAR_DEBUG}; # fix $progname if invoked from PATH my %Config = ( path_sep => ($^O =~ /^MSWin/ ? ';' : ':'), _exe => ($^O =~ /^(?:MSWin|OS2|cygwin)/ ? '.exe' : ''), _delim => ($^O =~ /^MSWin|OS2/ ? '\\' : '/'), ); _set_progname(); _set_par_temp(); # Magic string checking and extracting bundled modules {{{ my ($start_pos, $data_pos); { local $SIG{__WARN__} = sub {}; # Check file type, get start of data section {{{ open _FH, '<', $progname or last; binmode(_FH); my $buf; seek _FH, -8, 2; read _FH, $buf, 8; last unless $buf eq "\nPAR.pm\n"; seek _FH, -12, 2; read _FH, $buf, 4; seek _FH, -12 - unpack("N", $buf), 2; read _FH, $buf, 4; $data_pos = (tell _FH) - 4; # }}} # Extracting each file into memory {{{ my %require_list; while ($buf eq "FILE") { read _FH, $buf, 4; read _FH, $buf, unpack("N", $buf); my $fullname = $buf; outs(qq(Unpacking file "$fullname"...)); my $crc = ( $fullname =~ s|^([a-f\d]{8})/|| ) ? $1 : undef; my ($basename, $ext) = ($buf =~ m|(?:.*/)?(.*)(\..*)|); read _FH, $buf, 4; read _FH, $buf, unpack("N", $buf); if (defined($ext) and $ext !~ /\.(?:pm|pl|ix|al)$/i) { my ($out, $filename) = _tempfile($ext, $crc); if ($out) { binmode($out); print $out $buf; close $out; chmod 0755, $filename; } $PAR::Heavy::FullCache{$fullname} = $filename; $PAR::Heavy::FullCache{$filename} = $fullname; } elsif ( $fullname =~ m|^/?shlib/| and defined $ENV{PAR_TEMP} ) { # should be moved to _tempfile() my $filename = "$ENV{PAR_TEMP}/$basename$ext"; outs("SHLIB: $filename\n"); open my $out, '>', $filename or die $!; binmode($out); print $out $buf; close $out; } else { $require_list{$fullname} = $PAR::Heavy::ModuleCache{$fullname} = { buf => $buf, crc => $crc, name => $fullname, }; } read _FH, $buf, 4; } # }}} local @INC = (sub { my ($self, $module) = @_; return if ref $module or !$module; my $filename = delete $require_list{$module} || do { my $key; foreach (keys %require_list) { next unless /\Q$module\E$/; $key = $_; last; } delete $require_list{$key} if defined($key); } or return; $INC{$module} = "/loader/$filename/$module"; if ($ENV{PAR_CLEAN} and defined(&IO::File::new)) { my $fh = IO::File->new_tmpfile or die $!; binmode($fh); print $fh $filename->{buf}; seek($fh, 0, 0); return $fh; } else { my ($out, $name) = _tempfile('.pm', $filename->{crc}); if ($out) { binmode($out); print $out $filename->{buf}; close $out; } open my $fh, '<', $name or die $!; binmode($fh); return $fh; } die "Bootstrapping failed: cannot find $module!\n"; }, @INC); # Now load all bundled files {{{ # initialize shared object processing require XSLoader; require PAR::Heavy; require Carp::Heavy; require Exporter::Heavy; PAR::Heavy::_init_dynaloader(); # now let's try getting helper modules from within require IO::File; # load rest of the group in while (my $filename = (sort keys %require_list)[0]) { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; unless ($INC{$filename} or $filename =~ /BSDPAN/) { # require modules, do other executable files if ($filename =~ /\.pmc?$/i) { require $filename; } else { # Skip ActiveState's sitecustomize.pl file: do $filename unless $filename =~ /sitecustomize\.pl$/; } } delete $require_list{$filename}; } # }}} last unless $buf eq "PK\003\004"; $start_pos = (tell _FH) - 4; } # }}} # Argument processing {{{ my @par_args; my ($out, $bundle, $logfh, $cache_name); delete $ENV{PAR_APP_REUSE}; # sanitize (REUSE may be a security problem) $quiet = 0 unless $ENV{PAR_DEBUG}; # Don't swallow arguments for compiled executables without --par-options if (!$start_pos or ($ARGV[0] eq '--par-options' && shift)) { my %dist_cmd = qw( p blib_to_par i install_par u uninstall_par s sign_par v verify_par ); # if the app is invoked as "appname --par-options --reuse PROGRAM @PROG_ARGV", # use the app to run the given perl code instead of anything from the # app itself (but still set up the normal app environment and @INC) if (@ARGV and $ARGV[0] eq '--reuse') { shift @ARGV; $ENV{PAR_APP_REUSE} = shift @ARGV; } else { # normal parl behaviour my @add_to_inc; while (@ARGV) { $ARGV[0] =~ /^-([AIMOBLbqpiusTv])(.*)/ or last; if ($1 eq 'I') { push @add_to_inc, $2; } elsif ($1 eq 'M') { eval "use $2"; } elsif ($1 eq 'A') { unshift @par_args, $2; } elsif ($1 eq 'O') { $out = $2; } elsif ($1 eq 'b') { $bundle = 'site'; } elsif ($1 eq 'B') { $bundle = 'all'; } elsif ($1 eq 'q') { $quiet = 1; } elsif ($1 eq 'L') { open $logfh, ">>", $2 or die "XXX: Cannot open log: $!"; } elsif ($1 eq 'T') { $cache_name = $2; } shift(@ARGV); if (my $cmd = $dist_cmd{$1}) { delete $ENV{'PAR_TEMP'}; init_inc(); require PAR::Dist; &{"PAR::Dist::$cmd"}() unless @ARGV; &{"PAR::Dist::$cmd"}($_) for @ARGV; exit; } } unshift @INC, @add_to_inc; } } # XXX -- add --par-debug support! # }}} # Output mode (-O) handling {{{ if ($out) { { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; require IO::File; require Archive::Zip; } my $par = shift(@ARGV); my $zip; if (defined $par) { open my $fh, '<', $par or die "Cannot find '$par': $!"; binmode($fh); bless($fh, 'IO::File'); $zip = Archive::Zip->new; ( $zip->readFromFileHandle($fh, $par) == Archive::Zip::AZ_OK() ) or die "Read '$par' error: $!"; } my %env = do { if ($zip and my $meta = $zip->contents('META.yml')) { $meta =~ s/.*^par:$//ms; $meta =~ s/^\S.*//ms; $meta =~ /^ ([^:]+): (.+)$/mg; } }; # Open input and output files {{{ local $/ = \4; if (defined $par) { open PAR, '<', $par or die "$!: $par"; binmode(PAR); die "$par is not a PAR file" unless eq "PK\003\004"; } CreatePath($out) ; my $fh = IO::File->new( $out, IO::File::O_CREAT() | IO::File::O_WRONLY() | IO::File::O_TRUNC(), 0777, ) or die $!; binmode($fh); $/ = (defined $data_pos) ? \$data_pos : undef; seek _FH, 0, 0; my $loader = scalar <_FH>; if (!$ENV{PAR_VERBATIM} and $loader =~ /^(?:#!|\@rem)/) { require PAR::Filter::PodStrip; PAR::Filter::PodStrip->new->apply(\$loader, $0) } foreach my $key (sort keys %env) { my $val = $env{$key} or next; $val = eval $val if $val =~ /^['"]/; my $magic = "__ENV_PAR_" . uc($key) . "__"; my $set = "PAR_" . uc($key) . "=$val"; $loader =~ s{$magic( +)}{ $magic . $set . (' ' x (length($1) - length($set))) }eg; } $fh->print($loader); $/ = undef; # }}} # Write bundled modules {{{ if ($bundle) { require PAR::Heavy; PAR::Heavy::_init_dynaloader(); init_inc(); require_modules(); my @inc = sort { length($b) <=> length($a) } grep { !/BSDPAN/ } grep { ($bundle ne 'site') or ($_ ne $Config::Config{archlibexp} and $_ ne $Config::Config{privlibexp}); } @INC; # File exists test added to fix RT #41790: # Funny, non-existing entry in _<....auto/Compress/Raw/Zlib/autosplit.ix. # This is a band-aid fix with no deeper grasp of the issue. # Somebody please go through the pain of understanding what's happening, # I failed. -- Steffen my %files; /^_<(.+)$/ and -e $1 and $files{$1}++ for keys %::; $files{$_}++ for values %INC; my $lib_ext = $Config::Config{lib_ext}; my %written; foreach (sort keys %files) { my ($name, $file); foreach my $dir (@inc) { if ($name = $PAR::Heavy::FullCache{$_}) { $file = $_; last; } elsif (/^(\Q$dir\E\/(.*[^Cc]))\Z/i) { ($file, $name) = ($1, $2); last; } elsif (m!^/loader/[^/]+/(.*[^Cc])\Z!) { if (my $ref = $PAR::Heavy::ModuleCache{$1}) { ($file, $name) = ($ref, $1); last; } elsif (-f "$dir/$1") { ($file, $name) = ("$dir/$1", $1); last; } } } next unless defined $name and not $written{$name}++; next if !ref($file) and $file =~ /\.\Q$lib_ext\E$/; outs( join "", qq(Packing "), ref $file ? $file->{name} : $file, qq("...) ); my $content; if (ref($file)) { $content = $file->{buf}; } else { open FILE, '<', $file or die "Can't open $file: $!"; binmode(FILE); $content = ; close FILE; PAR::Filter::PodStrip->new->apply(\$content, $file) if !$ENV{PAR_VERBATIM} and $name =~ /\.(?:pm|ix|al)$/i; # Do not let XSLoader pick up auto/* from environment $content =~ s/goto +retry +unless +.*/goto retry;/ if lc($name) eq lc("XSLoader.pm"); } outs(qq(Written as "$name")); $fh->print("FILE"); $fh->print(pack('N', length($name) + 9)); $fh->print(sprintf( "%08x/%s", Archive::Zip::computeCRC32($content), $name )); $fh->print(pack('N', length($content))); $fh->print($content); } } # }}} # Now write out the PAR and magic strings {{{ $zip->writeToFileHandle($fh) if $zip; $cache_name = substr $cache_name, 0, 40; if (!$cache_name and my $mtime = (stat($out))[9]) { my $ctx = eval { require Digest::SHA; Digest::SHA->new(1) } || eval { require Digest::SHA1; Digest::SHA1->new } || eval { require Digest::MD5; Digest::MD5->new }; # Workaround for bug in Digest::SHA 5.38 and 5.39 my $sha_version = eval { $Digest::SHA::VERSION } || 0; if ($sha_version eq '5.38' or $sha_version eq '5.39') { $ctx->addfile($out, "b") if ($ctx); } else { if ($ctx and open(my $fh, "<$out")) { binmode($fh); $ctx->addfile($fh); close($fh); } } $cache_name = $ctx ? $ctx->hexdigest : $mtime; } $cache_name .= "\0" x (41 - length $cache_name); $cache_name .= "CACHE"; $fh->print($cache_name); $fh->print(pack('N', $fh->tell - length($loader))); $fh->print("\nPAR.pm\n"); $fh->close; chmod 0755, $out; # }}} exit; } # }}} # Prepare $progname into PAR file cache {{{ { last unless defined $start_pos; _fix_progname(); # Now load the PAR file and put it into PAR::LibCache {{{ require PAR; PAR::Heavy::_init_dynaloader(); { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; require File::Find; require Archive::Zip; } my $zip = Archive::Zip->new; my $fh = IO::File->new; $fh->fdopen(fileno(_FH), 'r') or die "$!: $@"; $zip->readFromFileHandle($fh, $progname) == Archive::Zip::AZ_OK() or die "$!: $@"; push @PAR::LibCache, $zip; $PAR::LibCache{$progname} = $zip; $quiet = !$ENV{PAR_DEBUG}; outs(qq(\$ENV{PAR_TEMP} = "$ENV{PAR_TEMP}")); if (defined $ENV{PAR_TEMP}) { # should be set at this point! foreach my $member ( $zip->members ) { next if $member->isDirectory; my $member_name = $member->fileName; next unless $member_name =~ m{ ^ /?shlib/ (?:$Config::Config{version}/)? (?:$Config::Config{archname}/)? ([^/]+) $ }x; my $extract_name = $1; my $dest_name = File::Spec->catfile($ENV{PAR_TEMP}, $extract_name); if (-f $dest_name && -s _ == $member->uncompressedSize()) { outs(qq(Skipping "$member_name" since it already exists at "$dest_name")); } else { outs(qq(Extracting "$member_name" to "$dest_name")); $member->extractToFileNamed($dest_name); chmod(0555, $dest_name) if $^O eq "hpux"; } } } # }}} } # }}} # If there's no main.pl to run, show usage {{{ unless ($PAR::LibCache{$progname}) { die << "." unless @ARGV; Usage: $0 [ -Alib.par ] [ -Idir ] [ -Mmodule ] [ src.par ] [ program.pl ] $0 [ -B|-b ] [-Ooutfile] src.par . $ENV{PAR_PROGNAME} = $progname = $0 = shift(@ARGV); } # }}} sub CreatePath { my ($name) = @_; require File::Basename; my ($basename, $path, $ext) = File::Basename::fileparse($name, ('\..*')); require File::Path; File::Path::mkpath($path) unless(-e $path); # mkpath dies with error } sub require_modules { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; require lib; require DynaLoader; require integer; require strict; require warnings; require vars; require Carp; require Carp::Heavy; require Errno; require Exporter::Heavy; require Exporter; require Fcntl; require File::Temp; require File::Spec; require XSLoader; require Config; require IO::Handle; require IO::File; require Compress::Zlib; require Archive::Zip; require PAR; require PAR::Heavy; require PAR::Dist; require PAR::Filter::PodStrip; require attributes; eval { require Cwd }; eval { require Win32 }; eval { require Scalar::Util }; eval { require Archive::Unzip::Burst }; eval { require Tie::Hash::NamedCapture }; eval { require PerlIO; require PerlIO::scalar }; } # The C version of this code appears in myldr/mktmpdir.c # This code also lives in PAR::SetupTemp as set_par_temp_env! sub _set_par_temp { if (defined $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/) { $par_temp = $1; return; } foreach my $path ( (map $ENV{$_}, qw( PAR_TMPDIR TMPDIR TEMPDIR TEMP TMP )), qw( C:\\TEMP /tmp . ) ) { next unless defined $path and -d $path and -w $path; my $username; my $pwuid; # does not work everywhere: eval {($pwuid) = getpwuid($>) if defined $>;}; if ( defined(&Win32::LoginName) ) { $username = &Win32::LoginName; } elsif (defined $pwuid) { $username = $pwuid; } else { $username = $ENV{USERNAME} || $ENV{USER} || 'SYSTEM'; } $username =~ s/\W/_/g; my $stmpdir = "$path$Config{_delim}par-$username"; mkdir $stmpdir, 0755; if (!$ENV{PAR_CLEAN} and my $mtime = (stat($progname))[9]) { open (my $fh, "<". $progname); seek $fh, -18, 2; sysread $fh, my $buf, 6; if ($buf eq "\0CACHE") { seek $fh, -58, 2; sysread $fh, $buf, 41; $buf =~ s/\0//g; $stmpdir .= "$Config{_delim}cache-" . $buf; } else { my $ctx = eval { require Digest::SHA; Digest::SHA->new(1) } || eval { require Digest::SHA1; Digest::SHA1->new } || eval { require Digest::MD5; Digest::MD5->new }; # Workaround for bug in Digest::SHA 5.38 and 5.39 my $sha_version = eval { $Digest::SHA::VERSION } || 0; if ($sha_version eq '5.38' or $sha_version eq '5.39') { $ctx->addfile($progname, "b") if ($ctx); } else { if ($ctx and open(my $fh, "<$progname")) { binmode($fh); $ctx->addfile($fh); close($fh); } } $stmpdir .= "$Config{_delim}cache-" . ( $ctx ? $ctx->hexdigest : $mtime ); } close($fh); } else { $ENV{PAR_CLEAN} = 1; $stmpdir .= "$Config{_delim}temp-$$"; } $ENV{PAR_TEMP} = $stmpdir; mkdir $stmpdir, 0755; last; } $par_temp = $1 if $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/; } sub _tempfile { my ($ext, $crc) = @_; my ($fh, $filename); $filename = "$par_temp/$crc$ext"; if ($ENV{PAR_CLEAN}) { unlink $filename if -e $filename; push @tmpfile, $filename; } else { return (undef, $filename) if (-r $filename); } open $fh, '>', $filename or die $!; binmode($fh); return($fh, $filename); } # same code lives in PAR::SetupProgname::set_progname sub _set_progname { if (defined $ENV{PAR_PROGNAME} and $ENV{PAR_PROGNAME} =~ /(.+)/) { $progname = $1; } $progname ||= $0; if ($ENV{PAR_TEMP} and index($progname, $ENV{PAR_TEMP}) >= 0) { $progname = substr($progname, rindex($progname, $Config{_delim}) + 1); } if (!$ENV{PAR_PROGNAME} or index($progname, $Config{_delim}) >= 0) { if (open my $fh, '<', $progname) { return if -s $fh; } if (-s "$progname$Config{_exe}") { $progname .= $Config{_exe}; return; } } foreach my $dir (split /\Q$Config{path_sep}\E/, $ENV{PATH}) { next if exists $ENV{PAR_TEMP} and $dir eq $ENV{PAR_TEMP}; $dir =~ s/\Q$Config{_delim}\E$//; (($progname = "$dir$Config{_delim}$progname$Config{_exe}"), last) if -s "$dir$Config{_delim}$progname$Config{_exe}"; (($progname = "$dir$Config{_delim}$progname"), last) if -s "$dir$Config{_delim}$progname"; } } sub _fix_progname { $0 = $progname ||= $ENV{PAR_PROGNAME}; if (index($progname, $Config{_delim}) < 0) { $progname = ".$Config{_delim}$progname"; } # XXX - hack to make PWD work my $pwd = (defined &Cwd::getcwd) ? Cwd::getcwd() : ((defined &Win32::GetCwd) ? Win32::GetCwd() : `pwd`); chomp($pwd); $progname =~ s/^(?=\.\.?\Q$Config{_delim}\E)/$pwd$Config{_delim}/; $ENV{PAR_PROGNAME} = $progname; } sub _par_init_env { if ( $ENV{PAR_INITIALIZED}++ == 1 ) { return; } else { $ENV{PAR_INITIALIZED} = 2; } for (qw( SPAWNED TEMP CLEAN DEBUG CACHE PROGNAME ARGC ARGV_0 ) ) { delete $ENV{'PAR_'.$_}; } for (qw/ TMPDIR TEMP CLEAN DEBUG /) { $ENV{'PAR_'.$_} = $ENV{'PAR_GLOBAL_'.$_} if exists $ENV{'PAR_GLOBAL_'.$_}; } my $par_clean = "__ENV_PAR_CLEAN__ "; if ($ENV{PAR_TEMP}) { delete $ENV{PAR_CLEAN}; } elsif (!exists $ENV{PAR_GLOBAL_CLEAN}) { my $value = substr($par_clean, 12 + length("CLEAN")); $ENV{PAR_CLEAN} = $1 if $value =~ /^PAR_CLEAN=(\S+)/; } } sub outs { return if $quiet; if ($logfh) { print $logfh "@_\n"; } else { print "@_\n"; } } sub init_inc { require Config; push @INC, grep defined, map $Config::Config{$_}, qw( archlibexp privlibexp sitearchexp sitelibexp vendorarchexp vendorlibexp ); } ######################################################################## # The main package for script execution package main; require PAR; unshift @INC, \&PAR::find_par; PAR->import(@par_args); die qq(par.pl: Can't open perl script "$progname": No such file or directory\n) unless -e $progname; do $progname; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; }; $::__ERROR = $@ if $@; } CORE::exit($1) if ($::__ERROR =~/^_TK_EXIT_\((\d+)\)/); die $::__ERROR if $::__ERROR; 1; #line 1012 __END__ d  o@  ?0oxoo>&6FVfvƘ֘&6FVfvƙ֙&6FVfvƚ֚&6FVfvƛ֛&6FVfvƜ֜[GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment 44HH !hh$8\4oX> @@@F No[oxxj s 00 |0w 1M  N^ ,̬>>>>??L@A@`ATP 0T#wELF@_4X4 (qqrĂĂCD܋ܛܛ$$PtdpppQtdRtdrĂĂ<<GNU5},w> |޵au; Hbc \e6P^/bA=B(gn M&QN^CI3ToWqB~q= 9 bDMhAxKa ]4@M;+BOahJ6C48mov_p)lj$ Un'` VUCn&!|zc*N8[BEp/``88yh]MTmq!dNf1Kg^HLudXf(Br1@v38Psj{j~f x`hL6W>5Syke<DXgFq*d&2;+3O|Gu>1y |?G|i7'pJcW<Z_w s\l'h!S ;,i#D)%=R1Q\h]X)]} "^FcZJ/-Y-*I:BVbm;xskDOh3we$E j}XG 0;4--x98^ $Y%%ceb^}0"v  ?op&!7f<XNxQ!C ;PWD| .=,R_>]$NlH)G>`t+oOSh yReF)y(?i}+a"XK[AVB~:pi%05%  [&&Mc%N4txgdQxG7O# 78L{=Ti#zIWP9v4p# ~L H1lbELero@<$Y.S $] ^Z{ q'l K}bT@gT`#M7ZiuntnPb*ocE6oms&Y 5:,JrJPn^'M 2 K*I/TJ8}fd9ZgESu,/jS$r\#i-.(`Dk{`F &?5 j3K6rJA6=A{x[:>_)|xWY@Q.o/T4<#y)E{m.q~L<y:d#ON0eUD"SRQ0>GB5E;zsH+@H Q d9>uJjtn7uSk40(;"-uD~t[2L)9,3pf0mm~=mX u[-FflN+Q9E}4Nc6|Z_1YIvI-a 3<g2ACwVVI\K/.YLwX'Ojlk.#CqHf9Y,3 -=vIpQ{vkMY<_eF"bs5 l TS[p1" [nZ,UK ~z\*rD1]zH](+A;|F8?a?@612(  A W2 :,U* 'RHu!PH*rGVJI!P'(V+VF.ZU:%/>Z?gK:=g\R.s,vt5 G!(_y5$P^:_aTRoz 7GC@%F!2t~?il7wjB A3 rtw" eh\>Cq/f2"@ar2wd'zq&n)zcWsk}L\?OdsyV0kW9z5mR{a Ra|tw`v}wO+06UCUi$XMk<[%7E*]{_4U @@R @3(0AQ$2X"V(AĂ"HPR H 0H l2~!2" @ h!p @`%GP $5Aa(-3@A  A'I1J$$`8"X#(!!A1 t B-ب1P  0!AZ@ <AF# P APQ D` %D(ET $ `0@!1.J $$@@  + D!b l(L@  A B,"P@BD2RE2  B8Q T@8P q  ) f`NFBt6rɡ H  * `@Qb6D 4(@!< 8`@L1 @@HA D(R g""@ 1h K0<G"0#@jrD)HT' @@A%A( $Xs@ "$)!Q2 -HP!b LH:IXhb5$L!@A'0B"@@BaB4(T"]`H%0H  @$! )@m  0H 8 $d&DE $ %P bHR F`EA` PP@L `\CdPd@, " Re `! h .`"!@@D:@"MAX C D" @H @  8@I 1LP:0 @E $dB& @P"Aa D@e @ 11q(4G!!h(, 'xmN"% #@ eL3( Q  F@He["F"H!( lO`@T ", @@T  S Q$ 5B @@@`s@,E"(1jB&R*#h(<QBp@`9A  0#Q(Hp$HS k$4P H1dRTa  D@H dL!QT Fpp  `@BT!ZZL9 A@(@ME@5( 8X @q(@ 1H(-%aCAU@@83d'|f`'0DH"@@ PA 8P00& (E:(( SB@@@(t# P͆F@@ ` !@9%,^P@1 !G ' DxP '@R@   $&+,/349:;>?CEGKNPRTUVXZ\`bfgijmopqstvz|~  !&'*+-.1469:=ADJLQTY[]_abcdfgjlmopsvwxy|~  "#&'()*+,/24689;=>?BCDHJLOPRSWXZ[\_adfjklnpsvxyz{~   "#%'(-0135;<?@BDGJKLMOQUVXY[adgjnpqtuvwxyz|}~   "&'),12568;>?@BCEHIJKLNOQRUVWX]_`afnoqtuvxz{}   !%'*,.012569:>@ADGJLNPSTVY\_abcdfjkorsuyz}   "%&(+,04579:<>BEFHIMPRSTVXYZ^acegjklorsuwx|  $(+./01489:=ACGMOPQUWY[^`bdhjkmpt{nƎFPZ@WdOawQ῀!e:3 ̿Դ$ZFm<Y.o,b%ic㍉\P<= % >P ͜&j[a.nkت̓i*}-@au Yg.N$عxڰTAA0Z< mh.Rz/c8 ͤvTb>}L=׉\+(PI F#_ˇe΀^lHӀBΉ.U#j_Ywቌk7gaQ9s-;q~7)z7Xz 6'd:|]Du) Pga]#_)b'ǓJ*clQxנYW.IGKC?!D1-ք-P,sJEיִRٻfZP6Wx=fUnk o\bmY D!%yGD"ހL2Qno Vn uer@^ƽaY^2whNK6OZhjXHxĝ^P\=L8ٙ]]©atoc!$~<n5QpQB5RtA xTY!JZ,jv2T>]G@YF|JԌNhG8 K'֮`GV5S-eGlb̶c~OnqD 7}=CE ]nY$9(9G-;u|'T \ܟVYŰҥ`Io#_$b tfJFA1 g]DY$yf!*#Q8|B}VIYN"xItYz+(PnBHOΎh7LYn|e0>msK}fgo*80{(Qs~:|:&!| dk2'+jMHWr@(G_n?  0rem&.4w?yw.lE\<=|LJ?yy 2^LO;:j<{Җl .ϥ[%'~2kYj $/v94Ayk#}U/J *\ldQP\$:g.?&(_^&fxCs2$2?bha bY^+RîT8IXq 6A mni DI̛Y~>o}MxhwQpaz`}nƞ7?=)̼'驪q!}a@[.:zW7@8G iĮX=YsJfdgP1h=PMCPb *žnY$ T0boQ/AO 8~pMTganzŸ(T\I ˖๚*RDX%UnHC؅D)E0KJs/N}"5>mAEL@/^ sԑ'9hao*͗ YY^?zl}/N~dm:'p #ړrU=.`E>mDxTF_{hp*v@b);v,U_+yxjm1((k\'Jgᮼ}qX% ?BDqYU| DŽZZ55\!1W*ͽל=cD6A:M4̉N1+=J-]Sw *7q3xuq̠jgV }6ELFPֶ37(ԛ])2eI6x9 |Y-qfnend_3c:\cഛODomXFQE Hd(Vȇղ1MVD op>Y'V:m 4!| ,5;Շ6dBG<쐑zF>&3Cq#V Sg@{o@Rr9\Ae8#什R*ΗLGUIb-'xdӻ=sHP@?x7+Bݜu<=NyⴷƌY7i,Mtpݙmc +C[jPCYq}r-z(>HDAJYo"})I]f/i N(`9A|2Ky۾XDIcto8Cҫ{haJW,MhtI>E&}@B4d(h>nv+.llA)I.XsJ:Y{6hFvKdn2a7]3hkfFsғOq@eo*ivȿ#^kjYڅr[FGd/h%4ac1fOd9e1_G=a"hS<_6}jE]2娵)Z4W1= ⿚tU0q'C'ޕq(wu%Bxj 88~T]WNd SCE힐W=|]xU $_y r7fP,pRh0# W\P'j}_M^u͋ )J{H+m`Iipy2,ļL"~N$' 3xvtè\qY -pb L| $׌[0Eyztir dpUsx':b\~$Cf4 Vlcso ŋ~[Y;@ [~Y$CjR;c~hSX r7QU I.w{>o8 !;-gFn  =i`Tl2Gb'-31ֿhf2LQL_0mi0ΧX~e6Wq4oNJJe2 /@d|` ŝtmY=hg2}а̥ L\)ĉk[†8[QQ65ekpɯ@}~HbvTIN8=};J"hY_AkT0IF7QOZBrB™)H޿^/]U=iG~uB.V$f)P5 _V=D|NYCLYd?K L& 19{uDHY O,3@k/kBRz="~6R` )VJ4[ -_DX o/s)2 =F_e}Zb+u\u0)?"]sk䝚37Ak)Dv6W}L-6ڳW$<ˀMk]A< @H;dǤXI G)}_WYGeZ DJkąSM?&WUI٘L&ҩUA<Ȟ㤭Yab2/Wnڗ|,P3b`W~vUV ٫[a 8;(%|GR$SѻJ%mT$OG(G7&ñq<U)J?$J1iղq3iڬi#A8#(O;\ iWJHNV OJ5BBE60MbB+V55{|NvŅo/Wn< ._gUC~,s)R:|YQkDg̜NP+D.Hʻn˘OrDǣKl2d_'h `K /WnhmMz&laYJA HL ;SLkUܓ͖=OOkJksK‹(g[,̛  v<=^<1X]ƮhOhQ}_;z|B x~ԟ88L^7ᐛ*R0&fxZzch_Fۦk KiI :FƿRHyɢֆKI)6Hӄ0;#ɮsKQsܪN}@CTz7;o`] !:V))-:!ZЂUeCZu7c#"N>zV<"ou{@XDx@-d=f,U֍`%l58+̜,;: 7A13-7eb*#7Zj*Jaos>VHni뽜ژR:m>mKޟc ovlL9zcUVY|#w\00LV%>LG!cn4m\86mp> -OC$`_acg)X,H0d6&ZdHhŊdL\;85]eWs4Ld.[{{*wɴpnKC̶Rw(+^}_.?1>IbæS9ML|?߫ʟ/BD9@^> sO2] dvH<KS˩;1eCZy}`5lں9;#.MԸbI? p!'j*EF?2Dk!c =$ Z7^ˆU1/?BETZ$U#$*!avDT 7= 0l@"f}Mf:[1Cq}j{ӌ_24ϽK k;{(+s͛YhP5S3՛ޱ,}_Ͻ8XۼKSJIR!>Q+x`>;vFDzF ѕn;EJ'y<;R4{Z8l'ZM/~Z` #S-[M/S9)zIv,+&8YlP'%ϋWxi|$2]UYK:dVK_nJpOZ7Wo[!Gkru%MTGv7B@%Oq`AILa˱:iziGAg@c"QsY;WiK 6jPF:g6bsf?uvJ_ZRy|N. q'B97l`Y9{q(P[:cOnDe(^ӢX+ =(e}X!E<0IhazJkHڅrsFxo]݌ik*P2:. (T5%6D ³n21鄾׫"iܛ|#IJl#MP {Z){TFH:_ޚʒha~" OdVC>?A }O[ 6i Zx3Cٸ,Dto[V0(j,KCWJ}X.F~}ؤPx]}1&)Q9SnX`Ei+*^P>EXjhu⍸2[maTPĤ*,1˼O|+@8"&Ŷ!e0bXלPn^ i5 "YCB)kvA1ANJ՜BD x(aIHs7P\fA\Tz`^:LryP39)Myl3.N3OjaPDP,,M OQV|BzBM\34(+R!3#JRwLpMw,MLz,zNR+&P2-K3 MNOwzMO<HLxPv)t-JkJNȌ[3K`ME>Nx!EM'L-3ZNL.*BL%Q}) 2MOJSPR1QkNx3z3NzO*D3zxREOAQy "JRN93DDl`  c   Ph a    r  B  ?  #fYl # Dp U \r  HN l E0  !l@  K(f 6O k p iC@o  (@ * \ȱ'x qZ e \3A v%` W  69@ B MZE G:m  U-U  A5 * Io N# jQp C0} v )# u w`=: ]| w0> \Ʊ`< p# ,D UOmi ` } p TH3  O   Id  8 1- 8 K  h, 9 7  \2+96 K (f @I s  * ~  LW`p @` c Z # =pv [ ~Z 00   = f<  G  r0  pR PG  B R 2 }p< М  u @2 md  1)   8P  A/ `# w 2 )9P%  l   HPW  PP <: qp$Y -  )q# / /Ci i U 0, MS juP Z   p_ M(P_ i .# 2?  h  ^  5  BH@2 M q@  ( ; }p"EP  : h C hap  K7+  i$ q  (pd {p # .@0[V I`  z0 ' <_ B< s !l p- ED  sP  P j "h  JD g P fA0 $ ^P  {Рn -0} ez^ 7d  |> q7  "' Y J = @q  Kp) y]( B # 4+ -+m Vs  u V> [D`  =`w R | \ ؊P2 0 w 2 K z  @# f5  IBV 2yW _  a  9F@  D  u -T 4 {cy 5b  pzl ,A & a M GP# C]  >  E  j  @ R <`>! V@p #i  Pr @E`  TG` PtF T4 R XyXk nP  Nx  "pY ?` > # "|@tp ,   v<  7/  h l4\   aVp ePB NPo ; t c yP]0 '`#   B^и  Cz m H @  /  ~ )h( CZ  W e  _@  l  C]  z`` }`pH9 2 p N $P` "`p  E  1o    dP  }]@  0&` gV o 8  4S _0  za .`m0  "P|S q   F x :V`p 7P)  hT [p Z[`Q [dн  Q 0   r  /DЉ  !0* # Q`g 8" c v <k F8  8S P 5g0  [9   f 0\ 6  c LpR E M@W\ )@q BP  É M P bO}< > R X K b`  1p  pBE  W@8^N Cj FF( L> \ʱv`y a  ; n F0@ X Ń9 G #`Y 'Z  ; Wi  *\ 40E RL ??  D0 2 @ JCP Y`d  'Oz A+K bc  3=PA  +?  * f  U D @_ J@Fg G`Xp $.1 i9w) BpL  6  sb@  4lP  { | 9` m  Z _?  up PMl j  q0  E  Dh  A06  9  2d _;  q`  ܈   ;$  t P9 H9; w H D  5p ,0D "o QP ``  r  =M n  iE J ?' w@\ 0 @  i80   Ҁ ')hA (gm B`S H S* w ,w nr  SP# 'J  }\~ pf P " gP < q, %=u S ? K = Ulp  NP# fP# T 4 8A D }`p3 =/!k(@ `d  G@ 2/+Q ? K kp @b ^0  f    /m  HA`  I  s  V )k z `@ WA m  M +   ;& `  & f < c_й  A  H 8` g  }"@#0mP K)f ?v UR@P I`  I p@ U  # P "0c=P v  - # 6@ X k`  sH>#  ] cP  \ W KP -7  `  ^fp  y 7  y| 8  mg`  D#m? FP  ' ^: 93# P. ! N # h`  + Д e ^   i}`p,`TT uF  7 U:@q U p )`qr UKo Qc g  uE  N)i8 EL`X 1w= f. $8  ;  9P[ l WpP  JJ/ b@'  P 1$  0G9K&h `  s@  ,D UT :`$  , U* *@7U" 8 sVp* !0 G& r  -" U =z U ' vc 2G  y { ?c  9 BV Hj 7J ,N @% f  ~: 8*@vs =(0_ ` 9 ,cм  T_ (^ p" % 4  e BpV _  + Ep  TPwN  H i]0  m  1#H 2 G  0 yb 0  r  # # Oj d  jX 8P  c MPDo mp  /`   9 A ^p   ; /` @3'5`  {:s } DO {   P\0] +# v<' r  Su0 N_ \PD vP 4`  c  Du"@6Ћ@; 0 * p h V* k  @2 `  7 z 0#   ?   u U% #`  0 U E  I OД ** Q # yl  # d  )P+ O O@0/@ T $ 0U  c- ? q 1 v '  |    `|S i@   4\qy !` y g l  1  n   5[@$ T"Оr F` I /pF z]( =`q  ! '  'Wg E f "~ :p n @T`4 \Ip " L}* [( @sp  3` {@m +0 uUP_ "[% e @ +  }[ F  o  0`  P> :z  *F z V p Ji  y] (^ D  ^0  c% \v:  r  Z/ A_  p   xy0Zn :`2 hP    c0  T# sP ](p_ 5 e 0 5p 4 c`  QP #0 ~6  @5 A4  y Fw= <<P l "o  h   U  3# ? |^  |p   i\nG f P@t )vp p  6P t %OQ >BA  WQ . JE }V &  `2G tH`8 y 8}p SpFg P N _' { F %G _  @ n xM K 8P4  l  {/ b (e, T g  .0, k  e`h P@ f  a   h  Pе C_ "  ||e ZP* Z0+` 2  ?  > l @IB   0# N_  1_  F  `# t 9 r  1<  k] ^`  i0  tp 'Z g   V 1# 3|t= X50r  Fk  t # ` > Y lY z ``  > Z C`r % ?' ) W1pu  op  S0@ b  e`   _ IP H !  v0 I .Q u=`L  pD? Q:   Q  a W  #P  u}pW }pg   {l 0t   I  3P ԇ# (` =v  @#   Sa`  Z b  `U8 pp  O r{@j s : W!  Ph v = `@ 2 JD PMI V* @# Q d  P: ] rpO )l vo  j   Bu O e   N   M<  ,u t8  Y` R5   ;p  w? Pu ' [e h! n|vu u T@* V, JX> bH`6  Z C\$ p / I,f # 5W0* TL`; _n  0<0  P`s ; ] &   Pg $`v  i  \E  1Y] CPx m !Wp Ɇ# u YP w # X Ip  -`( Cs % `# J n $1 ={0f c@   [P6  9f j G,h J  2 2 OJ 5 l SpP 2@J  ! 9 H 7 mM LTk  f  s`K j  iP  b  X h^  *P  "`  k  C a)i @N Cu % +;0  0 i 6  zDP E i  hx Jj ~pVp  $ R/ e  <21DyxJ@ ({n }[2 Au Bp8 0# % . p b# 0# "  { lf p w  =0m  jh0  s b  Gg@  n  Z  Z W2A z _  n0  3 v< Fy@X2 1<  0| 78  g[@1E Q K _  y[ wN 70@#] ~ /p 1 !g   *rt )00  v ` |x =GP  ( i*p{u PMJ }Q  l+ Y Vp QY T4 ф# a h [  3 hyX4 Nh Yd2 D` I \ b  $ $4Y  W ~ E  Y<`  k  'U_ $ j r  W+- > Fi  @ A@4 ] # R4[ $ E'Ze 4@_ ; NU_ A .  ?# I  z` |;` y gp  p  e`| l <.? L`  q H { ^ ~f ph  ^70  D  LN ]w= 0k  We  0 ` F S = # -1 eо  De  70  g    hl ? l LEp  ~+ pNg {m)  \{i< 6]  ~# Vh   `Y B 1< @@ / G` p Jn  @- /| I0  : h@  w? 8 6  0] (% G X` %  c6 J $ # CM NPGc [$p l  / @ + o < ~0Z ij  (g %d  (5  / E}`pψd F" yP\ fD E e  4О< +   }a  0 > B`J  k pjN t_  mP  MM  * #  /P  # W* ;p  lS $H0.  ' 8 1+  # y0 s tP 9k  @# |`r ]|u @ &@  ' r  Zp) S? n;  & G9B  u . bP  /  Qp 5p 0F  NC_ m`  sA` "  N w Xp 805  TxHA --0 i  SFc D@  +PP <p !f@  T4 NPj "0v  [o0|z  Rc   l0  P qw= 0H 2h  >4Z  J%h Z )  m  [9 U9 "} ^G y  xm@  2e  A=`  wP=  L?  =  Y : n  rL0< 7)i Y 4  d@  :  *> R : # LV* p;  Ê2 Ct % *s`  9~( aF   !P' t5 mJ>P'` x@Ll 7   M  _o  (  с2 d  mI  xDY K`&h Y`  q> x( 0 | 9Up8 t uW p9 . 2 pH* C w % LP= * -^  hMJ `# I  :@`Ij  w M*Nz Kzp^= 5n  (a@  @0 v MX MU J0D ^> \ OM o@B_ \űt   Vp ׅ# 8  I0  G` U^  ~z@_ 0{ { 2@z c+  @p  V  s) d"X  s |x ~` M5p  8  :  Y# & p T 2,Sp 8:  \ıI  Ni  P8 > d A"G 1p0  PzR - $SAy O?  x  # Ib   |{x c  9\  Ph  ȅ# 0Hi ,`N ;@ J O mi  `  i`  kI  ^# 5 f/ i  r   m H UZ  .G% s& )j K;0  ]  ^ 0 mk  r`  -  $0OL Q `JR `+ T k  ]t gl  & >C`k  xC0q % 2 %L5 %I0  p  ؃@# _# 8 B s0 I }   ` ~y ` ip  & 6L`: O <0 K '0R[ # 3I  ./ 8MH DЩ  !$0e{ kp`  bH   +0  S0 = c& )g H ' 1 G! x t0 _*L2u8 6P  y]( c:& Q P*  0 d qp  H- p =  P  UP* \LzbR > _ 3P +Pr &0^@ xM p# 6о ] W@)g  o  Q 5 B ~4^  s A'  (1z@^( Zp,  Q1 [@PBj S}0  . 5:x  }  NP] {1P'  tn   7 #&N }  4Y s z @ D RNdn K2`1B(R h `  A@/  y0W 1Z  :  mv QP 1>  j K@.Y R=J f Y/0Q   /' p^  p  R@Xp5  Fp  ^  L1  # d0  }r {n l  < ]\>+;| 4, xR [2(q6`  n@  f  gpc8 {  B^ -pn Q`9 cp |(  4b  4k  d   v [ 0 4 wC xEL &  U ]P  `~Py 7@ C O XCm E p 9 {kR ? +  p f f / Ή Q tp `9A p  G  w>8 (2?  :{  g2 b  ж 1HXC g, 2 0H0  p  ;>  A  `hM yVr ' B R: W A: w $ G`& 8 g  >| R d  D  چ# 40f  xOC W8 d e  a0  V/W  7 @ # / 0 @ + Y` k  $` >  `? <  lv; 5  %V0* m  DNb i   :p{  v? K Q  &~ p6   u j  -x S0} C W5 F    }e  } % yT 4 {l, -\ U* ; \ -0Q 097  s f  ep9 К *`D E  qP  @ N xS G6P  U8 L @% V6   Y ZJ0 spF 7Z  6  MY @ j G@ ~ G+  ?t  oO =7P  4a  т e n0 8 < \ 6NaU 0s ? e cNfj  f } W& n# F" 8 J  :!`a T]   Mj  X .  cZ 2 E v@ 1  t $@Q A01  BxEA \@ 5! @" 8 5  $a 8p 9 s f  oF5 ^{ G" 8 aл  bp  5i  0 1 4pj  6p  O{f   z^( v< ^n # ^ V@c) &,pb Ho  I[0# K> R 1# 19 p a  hq   B \ w># ^SP* (ECP? 93 2 _ .`4 FZP  h0}  ,*i 0 C 5 [p4 L0W0   (` #p '` a  y]J &@  Y J  S 7%p- O. C 16  r D  7  5 4 x0Vu ZP% n0 X@ g &`z j F% $pK p# JG@  SK@'h PH ) n "*X0v $j  u# ! =y U /0. ls  ^  A# p# p ~ Ff`  <p  dz_ GP- p }F >  O@ @p   @F )s %Gi D$0 [b0  &P B a  %  # >pz  "`^a *kp  r~Ћ[ o  G R n)j T4 OI@ %  i LSV A! e Ap*  Yl Hm   # _   PbS  T @1%  bP# p   ;@  0`m  o`  ] 9  Й] j  R ^ _W* r' 1E t r# WY `4 F  s 75 b WgP  L~E E0 2 *!` I B e0 ( | {| (H f k T@ of  0xPE[ I g1& v ~|wj 2E & @ 1r  : t  6j  *0 sSp* :D`  O b X }`p^@  & 8 ~  je  /Oxy `к  Hp" h  9P  Rp" ;^ @#    l E m-0# # S`b [k  j` 9 O ,  }P z1 Äp# 8`" r 6p^G ep  rc  PD  9@r <  <p| R s  6 g SF0 n xR4 \3! Dp@  tt 7 $poO 7  9 E  2fP  *(_  r? JQ - ߉` Q '1% % m2PC  MEZ Dp  5 X q# Vp 2 P` 0 ` *r* fп  =aP  L"_ =0@ 1 cp  -:#  (e DRp ) r# oK'f Vp 3Pd 0# P0 * O`s &q  + V$  0 @= 5R\2 ,{@e o  e  ?Ypk o  e `4 M\; H? m 1  > Y *` {` Qq  1Q`  n  G p 9  8 { I B j#p]  $M G  f # p  .C  E  3X b j0  v<' fT4 М| `  ]`   p  kP  p  j0 <@  @PAy ['z }v;C r<  %0 = Kt 7 I  P ]p  j@1 0c # *P@ 3< > d N TK !0+T |ww [sF #= e O(  mp  f0  j@  @ | ! * XA`  v0 "G  ]  J % D|t +Ap  ST4 hp  r   vJPD .` f _P  w*|d 6` [ ?p}u Jr   Z@g cL\ l   D  # }5p ( 0R @I __gmon_start___fini__cxa_finalize_Jv_RegisterClassesPerl_linklistPerl_sawparensPerl_cv_const_svPerl_ck_concatPerl_ck_nullPerl_ck_svconstPerl_custom_op_descPerl_newSVivPerl_sv_2mortalPerl_hv_commonPerl_sv_2pv_flagsPL_op_descPerl_custom_op_namePL_op_namePerl_sv_newmortalPerl_gv_efullname4Perl_ck_bitopPerl_ckwarnPerl_warnerPerl_newMYSUBPerl_save_pushptrPerl_croakPerl_messPerl_qerrorPerl_ck_matchPerl_pad_findmyPerl_av_fetchPerl_formPerl_yyerrorPerl_ck_rvconstPerl_gv_fetchsvPerl_sv_freePerl_pad_allocPL_ppaddrPerl_ck_anoncodePerl_pad_add_anonstrrchrPerl_push_scopePerl_save_pptrPerl_save_I32Perl_av_create_and_pushPerl_call_listPerl_pop_scopePerl_av_create_and_unshift_onePerl_stack_growPerl_op_const_svPerl_newSVsvPerl_cv_ckproto_lenPerl_ckwarn_dPerl_sv_setpvnPerl_sv_catpvfPerl_sv_catpvn_flagsPerl_op_refcnt_lockPL_op_mutexpthread_mutex_lockPerl_croak_nocontextPerl_op_refcnt_unlockpthread_mutex_unlockPerl_block_startPerl_pad_block_startPerl_save_hintsmemcpyPerl_gv_stashpvPerl_mg_findPerl_safesysfreePerl_op_freePerl_refcounted_he_freePerl_op_clearPerl_cv_undefPerl_pad_undefPerl_newXSPerl_gv_fetchpvPerl_newSV_typePerl_mro_method_changed_inPerl_gv_fetchfilePerl_newXS_flagsstrlenPerl_safesysmallocPerl_sv_usepvn_flagsPerl_sv_setpvPerl_savepvnPerl_newCONSTSUBPerl_save_vptrPerl_save_sptrPerl_savesharedpvPerl_packagePerl_save_hptrPerl_save_itemPerl_gv_stashsvPerl_sv_setsv_flagsPerl_newPMOPPerl_av_lenPerl_av_popPerl_sv_setivPL_checkPerl_av_pushPerl_sv_2iv_flagsmemcmpPerl_pmtransPerl_newSVpvnPerl_utf8n_to_uvuniqsortPerl_uvuni_to_utf8_flagsPerl_swash_initPerl_bytes_to_utf8Perl_newSVuvPerl_hv_common_key_lenPL_memory_wrapPerl_ck_ftstPerl_pad_freePerl_pregfreePerl_pad_swipePerl_op_nullPerl_peepPerl_newSVpvn_sharePerl_sv_backoffPerl_refcounted_he_fetchPerl_gv_AVaddPerl_scalarvoidPL_opargsPerl_scalarPerl_scalarkidsPerl_deprecate_oldPerl_sv_2nvstrncmpPerl_dorefPerl_oopsHVPerl_oopsAVPerl_refkidsPerl_modPerl_save_pushi32ptrPerl_newSVpvn_flagsPerl_refcounted_he_newPerl_ck_returnPerl_newPVOPPerl_newPADOPPerl_newGVOPPerl_newSVOPPerl_ck_methodstrchrPerl_newOPPerl_newNULLLISTPerl_scalarseqPerl_block_endPerl_pad_leavemyPerl_leave_scopePerl_newLISTOPPerl_force_listPerl_ck_repeatPerl_prepend_elemPerl_newSTATEOPPerl_intro_myPL_hints_mutexPerl_append_elemPerl_append_listPerl_scopePerl_fold_constantsPerl_create_eval_scopePL_sv_placeholder__sigsetjmpPerl_delete_eval_scopePerl_mg_freePerl_newBINOPPerl_newUNOPPerl_newSVREFPerl_newCVREFPerl_newHVREFPerl_newAVREFPerl_newRANGEPerl_sv_upgradePerl_newPROGPerl_get_cvn_flagsPerl_call_svPerl_markstack_growPerl_invertPerl_newGVREFPerl_ck_smartmatchPerl_ck_readlinePerl_ck_evalPerl_hv_copy_hints_hvPerl_newFORMPerl_savepvPerl_pad_tidyPerl_gv_fetchpvn_flagsPerl_newWHENOPPerl_newGIVENOPPerl_sv_2boolPerl_newLOGOPPerl_newCONDOPPerl_ck_sassignPerl_pmruntimePerl_pregcompPerl_bind_matchPerl_ck_splitPerl_convertPerl_newANONHASHPerl_newANONLISTPerl_jmaybePerl_newLOOPEXPerl_gen_constant_listPerl_listPerl_pp_pushmarkPerl_pp_anonlistPerl_listkidsPerl_ck_subrPerl_gv_fullname4Perl_dofilePerl_ck_sortPerl_newASSIGNOPPerl_newWHILEOPPerl_newLOOPOPPerl_newFOROPPerl_newSLICEOPPerl_utilizePerl_newATTRSUBPerl_vload_modulePerl_lex_startPerl_start_subparsePerl_load_module_nocontextPL_thr_keypthread_getspecificPerl_load_modulePerl_newSVhekPerl_newRVPerl_gv_HVaddPerl_sv_setpvfPerl_sv_cmpPerl_pad_fixup_inner_anonsPerl_newSVPerl_sv_catpvPerl_newANONATTRSUBPerl_newANONSUBPerl_newSUBPerl_apply_attrs_stringPerl_newSVpvPerl_pad_compname_typePerl_my_attrsPerl_myPerl_localizePerl_ck_listiobPerl_ck_funPerl_newSVpvfPerl_ck_substrPerl_ck_unpackPerl_ck_truncPerl_ck_chdirPerl_ck_joinPerl_ck_selectPerl_ck_rfunPerl_ck_definedPerl_ck_lfunPerl_ck_lengthconstPerl_ck_indexPerl_fbm_compilePerl_ck_grepPerl_ck_existsPerl_ck_exitPerl_ck_diePerl_ck_deletePerl_ck_execPerl_ck_globPerl_newGVgenPerl_gv_IOaddPerl_ck_shiftPerl_ck_requirememmovePerl_sv_force_normal_flagsPerl_ck_openPerl_mode_from_disciplinePerl_ck_eofPerl_ck_spairPerl_allocmyPerl_pad_check_dupPerl_pad_add_namePerl_nothreadhookPerl_dounwindPerl_PerlIO_stderrPerlIO_printfPerl_my_exit__longjmp_chkPerl_my_failure_exit__errno_locationPerl_get_svPerl_get_avPerl_init_argv_symbolsPerl_av_clearPerl_sv_utf8_decodePerl_init_stacksPerl_new_stackinfoPerl_init_debuggerPerl_get_hvPerl_doing_taintgetuidgeteuidgetgidgetegidPerl_my_unexecgetpidperl_freePL_veto_cleanupPerl_magicnamePerl_sv_magic__xstat64Perl_sv_chopPerl_moreswitchesPerl_sv_derived_fromPerl_vstringifyPerl_sv_lenPerl_PerlIO_stdoutPerl_parse_unicode_optsPerl_grok_hexPerl_sv_growPL_do_undumpPerl_grok_octPerl_upg_versionPerl_my_setenvPerl_eval_svPerl_save_intPerl_taint_properPerl_free_tmpsPerl_require_pvPerl_eval_pvPerl_get_cvmemchrPL_curinterpPerl_mg_setPerl_PerlIO_fileno__fxstat64Perl_sv_getssetegidseteuidPerl_candoPerlIO_rewindlseek64PL_sigfpe_savedPerl_rsignal_saveexecvPerl_rsignal_restorePerl_hv_name_setPerl_gv_SVaddPL_bincompat_optionsPerl_deprecatePerlIO_fdopenPerl_rsignal_statePerl_instrPerlIO_ungetcPerl_pad_newPerl_boot_core_PerlIOPerl_boot_core_UNIVERSALPerl_boot_core_xsutilsPerl_boot_core_mroPerl_PerlIO_stdinPerl_setdefoutgetenvPerl_yyparsestrerror_rPerlIO_binmodePerl_filter_addPerlIO_openPerl_find_scriptPerl_gv_checkPerl_my_popenPerl_rsignalstrtolPerl_filter_delPerl_call_atexitPerl_safesysreallocpthread_key_deleteperl_constructPerl_runops_standardPerl_sv_nosharingPerl_sv_nounlockingPerl_sv_destroyablePL_NoPL_YesPerl_sighandlerPerl_init_i18nl10nPerl_set_numeric_standardPerlIO_initPerl_reentrant_initPerl_hv_ksplitsysconfPL_mmap_page_sizeperl_allocpthread_setspecificpthread_key_createpthread_mutex_initPL_dollarzero_mutexPL_my_ctx_mutexPerl_sys_termpthread_mutex_destroyPerlIO_teardownPL_perlio_mutexPerl_sys_init3Perl_sys_initPerl_av_shiftperl_runperl_parsePL_use_safe_putenvPerl_get_hash_seedperl_destructPerl_my_fflush_allPerlIO_destructPerl_PerlIO_closePerlIO_cleanupPerl_sv_clean_allPerl_ptr_table_freePerl_sv_clearPerl_free_tied_hv_poolPerl_reentrant_freePerl_sv_free_arenasPerl_sv_clean_objsPerl_call_methodPerl_call_pvPerl_call_argvPerl_gv_name_setPerl_unshare_hekPerl_share_hekPerl_is_gv_magicalPerl_is_gv_magical_svPerl_magic_freeovrldPerl_gp_refPerl_gp_freePerl_newGPPerl_safesyscallocPerl_gv_initPerl_sv_reftypePerl_sv_add_backrefPerl_gv_fetchfile_flagsPerl_gv_const_svPerl_amagic_callPL_AMG_namelensPL_AMG_namesPerl_gv_fetchmethod_autoloadPerl_save_scalarPerl_is_utf8_idcontPerl_is_utf8_digitPerl_warnstrcmpPerl_gv_stashpvnPerl_new_versionPerl_vnumifyPL_sig_namePerl_newIOPerl_hv_clear__memcpy_chkPerl_gv_fetchmethPerl_mro_get_linear_isaPerl_mro_meta_initPerl_gv_autoload4Perl_gv_fetchmeth_autoloadPerl_Gv_AMupdatePerl_sv_unmagicPerl_gv_handlerPerl_lex_endPerl_pmflagPerl_scan_vstring__ctype_b_locPerl_yywarnPerl_scan_numPerl_grok_numberPerl_my_atofPerl_sv_setnvPerl_sv_setuvPerl_keywordPerl_is_utf8_alnumPerl_is_utf8_stringPerl_sv_pvn_force_flagsPerl_str_to_versionPerl_parser_freePerl_PerlIO_clearerrPerl_av_storePerl_savesharedpvnPL_utf8skipPerl_is_utf8_markPerl_filter_readPerl_PerlIO_readPerl_PerlIO_errorPerl_my_pclosePerl_utf8_to_uvchrPerl_sv_cat_decodePerl_sv_magicextPerl_utf16_to_utf8Perl_diePerl_av_unshiftPerl_yylexPerl_utf8_lengthPL_no_myglobPerl_save_boolPerl_save_I8Perl_save_I16Perl_save_generic_pvrefPerl_utf8_hopPerl_sv_utf8_upgrade_flagsPerlIO_apply_layersPerl_delimcpyPerl_PerlIO_tellPerl_sv_recode_to_utf8Perl_sv_catsv_flagsPL_warn_nosemiPL_warn_reservedPerl_utf16_to_utf8_reversed__snprintf_chkPerl_save_destructor_xPerl_pad_resetPerl_pad_pushPerl_av_extendPerl_do_dump_padPerl_dump_indentPerl_find_rundefsvoffsetPerl_find_runcvPerl_cv_clonePerl_av_fillPerl_regdumpPerl_regpropPerl_re_intuit_stringPerl_reg_stringifyPerl_regnextPerl_save_re_contextPerl_savestack_grow_cntPerl_reg_temp_copyPerl_regdupe_internalPerl_sv_dupPerl_reg_numbered_buff_storePL_no_modifyPerl_re_dupPerl_ptr_table_fetchPerl_ptr_table_storePerl_regfree_internalPerl_reg_qr_packagePerl_reg_numbered_buff_lengthPerl_is_utf8_string_loclenPerl_report_uninitPerl_reg_numbered_buff_fetchPerl_sv_untaintPerl_reg_named_buff_firstkeyPerl_hv_iterinitPerl_reg_named_buff_nextkeyPerl_hv_iternext_flagsPerl_reg_named_buff_iterPerl_reg_named_buff_allPerl_newRV_noincPerl_reg_named_buff_scalarPerl_reg_named_buff_existsPerl_reg_named_buff_fetchPerl_reg_named_buffPerl_vmessPerl_to_uni_foldmemsetPerl_sv_len_utf8PL_foldPL_regkindPerl_sv_compile_2opPL_fold_localePerl_reginitcolorsPL_simplePL_variesPerl_ninstrPerl_repeatcpyPerl_re_compilePL_core_reg_enginePL_reg_namePL_reg_extflags_namePerl_regexec_flagsPerl_re_intuit_startPerl_debprofdumpPerl_watchPL_op_sequencePerl_sv_2uv_flagsPL_op_seqPerl_pv_escapePerl_pv_prettyPerl_pv_displayPerl_sv_peekPerl_sv_taintedPerl_set_numeric_localPerl_sv_uni_displayPerl_debopPerl_stashpv_hvname_matchPerl_debPerl_runops_debugPerl_deb_stack_allPerl_despatch_signalsPerl_debstackPerl_dump_vindentPerlIO_vprintfPerl_do_gvgv_dumpPerlIO_putcPerl_do_gv_dumpPerl_do_hv_dumpPerl_gv_dumpPerl_do_op_dumpPerl_do_pmop_dumpPerl_op_dumpPerl_pmop_dumpPerl_dump_evalPerl_dump_formPerl_dump_subPerl_dump_packsubsPerl_dump_allPerl_PerlIO_setlinebufPerl_do_sv_dumpPerl_do_magic_dumpPerl_hv_placeholders_getPerl_hv_backreferences_pPerl_hv_itervalPerl_hv_iterkeysvPerl_av_arylen_pPerl_sv_dumpPL_vtbl_svPL_vtbl_envPL_vtbl_envelemPL_vtbl_sigPL_vtbl_sigelemPL_vtbl_packPL_vtbl_packelemPL_vtbl_dblinePL_vtbl_isaPL_vtbl_arylenPL_vtbl_mglobPL_vtbl_nkeysPL_vtbl_taintPL_vtbl_substrPL_vtbl_vecPL_vtbl_posPL_vtbl_bmPL_vtbl_fmPL_vtbl_uvarPL_vtbl_defelemPL_vtbl_collxfrmPL_vtbl_amagicPL_vtbl_amagicelemPL_vtbl_backrefPL_vtbl_utf8PL_vtbl_arylen_pPL_vtbl_hintselemPerlIO_putsPerl_magic_dumpPerl_rninstrPerl_ibcmpPerl_ibcmp_localePerl_my_swabnPerl_get_op_namesPerl_get_op_descsPerl_get_no_modifyPerl_get_opargsPerl_get_ppaddrPerl_get_vtblPL_vtbl_regdatumPL_vtbl_regdataPL_vtbl_regexpPL_vtbl_isaelemPerl_mini_mktimePerl_get_re_argPerl_mg_getPerl_my_dirfdPerl_get_db_subPerl_my_strlcpyPerl_my_strlcatPerl_get_contextPerl_getenv_lenPerl_seedgettimeofdayPerl_my_socketpairPerl_vverifyPerl_getcwd_svgetcwdPerl_init_tmtzsetlocaltime_rPerl_PerlIO_flushPerl_wait4pidsigactionsigemptysetPerl_my_forkPerl_setenv_getixPerl_mallocPerl_new_warnings_bitfieldPerl_reallocPerl_sv_2cvPerl_write_to_stderrPerl_PerlIO_writePL_no_memPerl_savesvpvPerl_screaminstrPerl_fbm_instrPL_freqPerl_mfreePerl_my_clearenvPerl_my_strftimeunsetenvPerl_callocPerl_sv_vsetpvfnPerl_vwarnPerl_warn_nocontextPerl_vwarnerPerl_die_wherePerl_report_evil_fhPerl_warner_nocontextPerl_vcroakPerl_my_vsnprintf__vsnprintf_chkPerl_my_snprintfsrand48_rdrand48_rstrtoulPerl_vcmpPerl_vnormaldivPerl_scan_versionPerl_newSVrvPerl_sv_insert_flagsdup2Perl_taint_envPerl_do_execfreePerl_do_exec3Perl_my_popen_listPerl_do_aexec5Perl_my_cxt_initPL_my_cxt_indexsetlocalePerl_set_contextPerl_atfork_unlockPerl_atfork_lockPerl_vdiePerl_die_nocontextPerl_mess_nocontextPerl_vformPerl_form_nocontextPerl_mg_magicalPerl_magic_regdata_cntPerl_magic_getuvarPerl_magic_setamagicPerl_magic_freearylen_pPerl_magic_gettaintPerl_magic_settaintPerl_magic_setmglobPerl_magic_setuvarPerl_magic_clearhintPerl_magic_sethintsigaddsetsigprocmaskPerl_whichsigPL_sig_numPerl_csighandlerPerl_magic_regdatum_setPerl_magic_setutf8Perl_magic_setcollxfrmPerl_magic_setsetgroupssetreuidsetregidPerl_magic_freeregexpPerl_magic_setregexpPerl_magic_killbackrefsPerl_sv_kill_backrefsPerl_magic_setdblinePerl_magic_setvecPerl_do_vecsetPerl_magic_getvecPerl_do_vecgetPerl_magic_getsubstrPerl_sv_pos_u2bPerl_magic_setsubstrPerl_magic_setposPerl_magic_getposPerl_sv_pos_b2uPerl_magic_setarylenPerl_magic_wipepackPerl_magic_setpackPerl_magic_existspackPerl_magic_clearpackPerl_magic_getpackPerl_magic_nextpackPerl_magic_scalarpackPerl_hv_eiter_setPerl_magic_sizepackPerl_magic_setnkeysPerl_magic_getnkeysPerl_magic_clearisaPerl_mro_isa_changed_inPerl_magic_setisaPerl_magic_clearsigPerl_magic_setsigPL_csighandlerpPerl_magic_getsigPerl_magic_clear_all_envPerl_magic_set_all_envPerl_hv_iterkeyPerl_magic_clearenvPerl_magic_setenvPerl_emulate_cop_ioPerl_magic_getPerl_sv_copypvgetgroupsPerl_magic_lenPerl_magic_regdatum_getPerl_mg_copyPerl_mg_clearPerl_save_allocPerl_mg_sizePerl_vivify_defelemPL_no_helem_svPL_no_aelemPerl_magic_getdefelemPerl_magic_getarylenPerl_mg_lengthPerl_magic_setdefelemPerl_mg_localizePerl_reentrant_sizePerl_reentrant_retrygethostbyname_rgetnetbyname_rgetprotobyname_rgetservbyname_rgetpwnam_rgethostent_rgetpwent_rgetpwuid_rgetservent_rgetservbyport_rgetprotoent_rgetprotobynumber_rgetnetent_rgetnetbyaddr_rgethostbyaddr_rgetgrnam_rgetgrent_rgetgrgid_rXS_mro_invalidate_method_cachesPerl_croak_xs_usagePerl_mro_get_from_namePerl_mro_get_private_dataXS_mro_is_universalPerl_mro_set_private_dataXS_mro_get_isarevPerl_mro_set_mroPerl_mro_meta_dupXS_mro_get_pkg_genXS_mro_get_mroXS_mro_set_mroXS_mro_method_changed_inXS_mro_get_linear_isaPerl_mro_registerPerl_bytes_from_utf8Perl_get_arenaPerl_offer_nice_chunkPerl_hv_placeholders_setPerl_hv_placeholders_pPerl_unsharepvnPerl_hv_kill_backrefsPerl_hv_riter_setPerl_hv_eiter_pPerl_hv_riter_pPerl_hv_free_entPerl_hv_clear_placeholdersPerl_refcounted_he_chain_2hvPerl_hv_iternextsvPerl_hv_delayfree_entPerl_hv_scalarPerl_newHVhvPerl_hv_undefPerl_hek_dupPerl_he_dupPerl_av_reifyPerl_av_existsPerl_av_makePerl_av_undefPerl_av_deletePerl_pp_nullPerl_pp_setstatePerl_pp_pushrePerl_pp_gvPerl_pp_method_namedPerl_pp_methodPerl_vivify_refPerl_pp_aelemPerl_is_lvalue_subPerl_sv_mortalcopyPerl_save_aelemPerl_pp_aelemfastPerl_sub_crush_depthPerl_pp_eqPerl_pp_enterPerl_cxincPerl_pp_leavePerl_pp_entersubPerl_block_gimmePL_no_symrefPL_no_usymPerl_pp_definedPerl_pp_leavesublvPerl_tmps_growPerl_pp_leavesubPerl_pp_nextstatePerl_pp_orPerl_pp_cond_exprPerl_pp_andPerl_pp_grepwhilePerl_pp_unstackPerl_pp_substPerl_rxres_savePerl_pp_preincPerl_sv_incPerl_pp_iterPerl_pp_helemPerl_save_deletePerl_save_helemPerl_save_gpPerl_do_readlinePerl_sv_unref_flagsPerl_nextargvPerl_do_close__lxstat64Perl_start_globPerl_do_opennPerl_pp_matchPerl_dowantarrayPerl_pp_qrPerl_pp_aassignsetresuidsetresgidPerl_pp_rv2avPL_no_localize_refPerl_softref2xvPerl_save_aryPerl_save_hashPerl_do_kvPerl_pp_printPerl_do_printPerl_save_generic_svrefPerl_pp_joinPerl_do_joinPerl_pp_addPerl_sv_2numPerl_pp_readlinePerl_pp_rv2gvPerl_pp_padsvPerl_save_clearsvPerl_pp_concatPerl_pp_sassignPerl_pp_stringifyPerl_pp_gvsvPerl_pp_constPerl_sv_add_arenaPerl_sv_report_usedPerl_sv_newrefPerl_dirp_dupPerl_ptr_table_clearPerl_any_dupPerl_ptr_table_newPerl_ptr_table_splitPerl_fp_dupPerlIO_fdupopenPerl_rvpv_dupPerl_mg_dupPerl_gp_dupPerl_cx_dupPerl_si_dupPerl_parser_dupPerl_ss_dupPerl_sv_isobjectPerl_sv_isaPerl_sv_truePerl_sv_2ioPerl_cast_uvPerl_cast_ivPerl_sv_vcatpvfnPL_hexdigitfrexpPerl_sv_setuv_mggcvtPerl_sv_vcatpvf_mgPerl_sv_catpvf_mgPerl_sv_catpvf_mg_nocontextPerl_sv_vcatpvfPL_warn_uninitPerl_io_closePerl_sv_free2Perl_sv_rvweakenPerl_sv_collxfrmPerl_mem_collxfrmPerl_sv_cmp_localePL_vtbl_ovrldPerl_sv_blessPerl_sv_replacePerl_sv_setref_nvPerl_newSVnvPerl_sv_setnv_mgPerl_sv_setref_ivPerl_sv_setref_uvPerl_sv_setiv_mgPerl_sv_catpv_mgPerl_sv_setpv_mgPerl_sv_setpvivPerl_sv_setpviv_mgPerl_sv_setref_pvnperl_clonePerlIO_clonePerl_sv_setpvn_mgPerl_sv_decPerl_sv_setref_pvPerl_sv_setsv_mgPerl_sv_eqPerl_sv_utf8_downgradePerl_utf8_to_bytesPerl_sv_pvbyten_forcePerl_sv_pvutf8n_forcePerl_sv_utf8_encodePerl_sv_2pvutf8Perl_sv_2pvbytePerl_looks_like_numberPerl_sv_catpvf_nocontextPerl_sv_vsetpvf_mgPerl_sv_setpvf_mgPerl_sv_setpvf_mg_nocontextPerl_sv_vsetpvfPerl_sv_setpvf_nocontextPerl_vnewSVpvfPerl_newSVpvf_nocontextPerlIO_isutf8PerlIO_getcPerl_PerlIO_eofPerlIO_fast_getsPerl_PerlIO_get_cntPerl_PerlIO_get_ptrPerl_PerlIO_set_ptrcntPerl_sv_resetPerl_pp_oncePerl_unimplemented_opPerl_pp_lockPerl_pp_srefgenPerl_pp_stubPerl_pp_splitPerl_is_utf8_spacePerl_save_pushptrptrPerl_pp_listPerl_pp_reversePerl_pp_unshiftPerl_pp_shiftPerl_pp_pushPerl_pp_lslicePerl_pp_refgenPerl_pp_splicePerl_pp_anonhashPerl_pp_hslicePerl_pp_existsPerl_pp_deletePerl_pp_eachPerl_pp_aslicePerl_pp_quotemetaPerl_pp_lcPerl_to_utf8_lower__ctype_tolower_locPerl_pp_ucPerl_to_utf8_upper__ctype_toupper_locPerl_pp_ucfirstPerl_to_utf8_titlePerl_pp_cryptcrypt_rPerl_pp_chrPerl_uvchr_to_utf8_flagsPerl_pp_ordPerl_pp_sprintfPerl_do_sprintfPerl_pp_indexPerl_pp_posPerl_pp_vecPerl_pp_substrPerl_pp_lengthPerl_pp_octPerl_grok_binPerl_pp_i_negatePerl_pp_i_ncmpPerl_pp_i_nePerl_pp_i_eqPerl_pp_i_gePerl_pp_i_lePerl_pp_i_gtPerl_pp_i_ltPerl_pp_i_subtractPerl_pp_i_addPerl_pp_i_moduloPerl_pp_i_dividePerl_pp_i_multiplyPerl_pp_complementPerl_pp_nePerl_pp_gePerl_pp_lePerl_pp_gtPerl_pp_ltPerl_pp_right_shiftPerl_pp_left_shiftPerl_pp_absPerl_pp_subtractPerl_pp_dividePerl_pp_multiplyPerl_pp_intceilfloorPerl_pp_srandPerl_pp_randPerl_pp_sinPerl_pp_atan2Perl_pp_notPerl_pp_negatePerl_pp_bit_orPerl_do_vopPerl_pp_bit_andPerl_pp_scmpPerl_pp_slePerl_pp_snePerl_pp_seqPerl_pp_ncmp__isnanPerl_pp_repeatPerl_pp_modulofmodPerl_pp_powPerl_pp_postdecPerl_pp_predecPerl_pp_postincPerl_pp_undefPerl_pp_chompPerl_do_chompPerl_pp_schompPerl_pp_chopPerl_do_chopPerl_pp_schopPerl_pp_transPerl_do_transPerl_pp_studyPerl_pp_gelemPerl_pp_blessPerl_pp_refPerl_pp_anoncodePerl_pp_prototypePerl_pp_rv2cvPerl_pp_av2arylenPL_no_symref_svPerl_pp_rv2svPerl_pp_padavPerl_pp_padhv_LIB_VERSIONPerl_cx_dumpPerl_savestack_growPerl_save_padsvPerl_save_destructorPerl_save_padsv_and_mortalizePerl_save_set_svflagsPerl_save_svrefPerl_save_aptrPerl_save_shared_pvrefPerl_pp_regcresetPerl_pp_leavewhenPerl_pp_leavegivenPerl_pp_xorPerl_pp_enterwhenPerl_pp_enterloopPerl_pp_rangePerl_pp_wantarrayPerl_pp_entergivenPerl_pp_leavetryPerl_pp_entertryPerl_pp_leaveevalPerl_pp_leaveloopPerl_pp_enterevalPerl_pp_requirestrstrPerl_pp_exitPerl_pp_enteriterPerl_pp_dbstatePerl_pp_resetPerl_pp_flipPerl_pp_callerPerl_pp_flopPerl_pp_mapwhilePerl_pp_grepstartPerl_rxres_freePerl_pp_breakPerl_pp_continuePerl_pp_gotoPerl_pp_redoPerl_pp_nextPerl_pp_lastPerl_pp_returnPerl_rxres_restorePerl_pp_formlinePerl_pp_substcontPerl_pp_regcompPerl_pp_smartmatchPerl_pp_syscallPerl_pp_getlogingetlogin_rPerl_pp_egrentendgrentPerl_pp_sgrentsetgrentPerl_pp_ggrentPerl_pp_epwentendpwentPerl_pp_spwentsetpwentPerl_pp_gpwentgetspnam_rPerl_pp_eserventendserventPerl_pp_eprotoentendprotoentPerl_pp_enetentendnetentPerl_pp_ehostentendhostentPerl_pp_sserventsetserventPerl_pp_sprotoentsetprotoentPerl_pp_snetentsetnetentPerl_pp_shostentsethostentPerl_pp_gserventPerl_pp_gprotoentPerl_pp_gnetent__h_errno_locationPerl_pp_ghostentPerl_pp_semctlPerl_do_ipcctlPerl_pp_semgetPerl_do_ipcgetPerl_pp_shmwritePerl_do_shmioPerl_do_msgsndPerl_do_semopPerl_do_msgrcvPerl_pp_timePerl_pp_sleeppausePerl_pp_alarmPerl_pp_gmtimegmtime_rPerl_pp_tmsPerl_pp_setpriorityPerl_pp_getpriorityPerl_pp_setpgrpsetpgidPerl_pp_getpgrpgetpgidPerl_pp_getppidPerl_pp_execPerl_pp_systemPerl_pp_waitpidPerl_pp_waitPerl_pp_forkPerl_pp_closedirPerl_pp_rewinddirPerl_pp_seekdirPerl_pp_telldirPerl_pp_readdirreaddir64_rPerl_pp_open_diropendirPerl_pp_rmdirPerl_pp_mkdirPerl_pp_readlinkPerl_pp_linkPerl_pp_renamePerl_pp_chrootPerl_pp_chownPerl_applyPerl_pp_chdirfchdirPerl_pp_fttextPerlIO_has_basePerl_PerlIO_get_bufsizPerl_PerlIO_get_basePL_warn_nlPerl_pp_ftttyisattyPerl_pp_ftlinkPerl_my_lstatPerl_pp_ftrownedPerl_my_statPerl_pp_ftisPerl_pp_ftrreadeaccessPerl_pp_statPerl_pp_getpeernamePerl_pp_ssockoptgetsockoptsetsockoptPerl_pp_shutdownPerl_pp_acceptPerl_pp_pipe_opPerl_pp_listenPerl_pp_connectPerl_pp_bindPerl_pp_sockpairPerl_pp_socketPerl_pp_flockPerl_pp_ioctlPerl_pp_truncateftruncate64Perl_pp_tiedPerl_pp_filenoPerl_pp_closePerl_pp_sysseekPerl_do_sysseekPerl_do_seekPerl_pp_tellPerl_do_tellPerl_pp_sysopenPerl_pp_eofPerl_do_eofPerl_pp_sendsendtoPerl_pp_sysreadrecvfromPerl_pp_prtfPerl_pp_leavewritePerl_pp_enterwritePerl_pp_getcPerl_pp_selectPerl_pp_sselectPerl_pp_dbmopenPerl_pp_untiePerl_pp_tiePerl_pp_binmodePerl_pp_umaskPerl_pp_openPerl_pp_diePerl_pp_warnPerl_pp_rcatlinePerl_pp_globPL_no_securityPerl_pp_backtickPerl_PerlIO_context_layersPerl_swash_fetchshmatshmdtPerl_ingroupexecvpPL_sh_pathexeclPerl_PerlIO_seekkillpgfutimesfchmodfchownPerlIO_intmode2strPerlIO_opennPerlIO_has_cntptrPerlIO_canset_cntPerl_PerlIO_set_cntPerl_regclass_swashPerl_to_utf8_foldPerl_is_uni_space_lcPerl_is_uni_alnum_lcPerl_is_uni_alnumPerl_ibcmp_utf8Perl_is_uni_digit_lcPerl_utf8_distancePerl_pregexecPerl_is_utf8_charPerl_utf8n_to_uvchrPerl_is_utf8_xdigitPerl_is_utf8_punctPerl_is_utf8_printPerl_is_utf8_graphPerl_is_utf8_cntrlPerl_is_utf8_lowerPerl_is_utf8_upperPerl_is_utf8_asciiPerl_is_utf8_alphaPerl_is_utf8_idfirstPerl_is_utf8_alnumcPerl_utf8_to_uvuniPerl_pv_uni_displayPerl_uvchr_to_utf8Perl_to_utf8_casePerl_to_uni_lowerPerl_to_uni_lower_lcPerl_to_uni_titlePerl_to_uni_title_lcPerl_to_uni_upperPerl_to_uni_upper_lcPerl_is_uni_xdigitPerl_is_uni_xdigit_lcPerl_is_uni_punctPerl_is_uni_punct_lcPerl_is_uni_printPerl_is_uni_print_lcPerl_is_uni_graphPerl_is_uni_graph_lcPerl_is_uni_cntrlPerl_is_uni_cntrl_lcPerl_is_uni_lowerPerl_is_uni_lower_lcPerl_is_uni_upperPerl_is_uni_upper_lcPerl_is_uni_digitPerl_is_uni_spacePerl_is_uni_asciiPerl_is_uni_ascii_lcPerl_is_uni_alphaPerl_is_uni_alpha_lcPerl_is_uni_idfirstPerl_is_uni_idfirst_lcPerl_is_uni_alnumcPerl_is_uni_alnumc_lcPerl_deb_nocontextPerl_vdebPerl_debstackptrsXS_Regexp_DESTROYXS_Internals_HvREHASHXS_Tie_Hash_NamedCapture_flagsXS_Tie_Hash_NamedCapture_SCALARXS_Tie_Hash_NamedCapture_NEXTKXS_Tie_Hash_NamedCapture_FIRSTKXS_Tie_Hash_NamedCapture_EXISTSXS_Tie_Hash_NamedCapture_FETCHXS_re_regnames_countXS_utf8_is_utf8XS_Tie_Hash_NamedCapture_CLEARXS_Tie_Hash_NamedCapture_DELETEXS_Tie_Hash_NamedCapture_STOREXS_re_is_regexpXS_re_regexp_patternXS_re_regnameXS_Internals_SvREADONLYXS_re_regnamesXS_Internals_rehash_seedXS_Internals_hash_seedXS_PerlIO_get_layersXS_Internals_hv_clear_placeholdXS_Internals_SvREFCNTXS_utf8_unicode_to_nativeXS_utf8_native_to_unicodeXS_utf8_downgradeXS_utf8_upgradeXS_utf8_decodeXS_utf8_encodeXS_utf8_validXS_version_qvXS_version_newXS_UNIVERSAL_canXS_UNIVERSAL_isaXS_UNIVERSAL_DOESXS_UNIVERSAL_VERSIONXS_version_noopXS_version_stringifyXS_version_numifyXS_version_normalXS_version_vcmpXS_version_booleanXS_version_is_alphaXS_version_is_qvPerl_sv_doesXS_attributes_reftypeXS_attributes__guess_stashXS_attributes__fetch_attrsXS_attributes__modify_attrsXS_attributes_bootstrapPL_no_wrongrefPL_no_sock_funcPL_no_dir_funcPL_no_funcPL_uuemapPL_uudmapPerl_pp_unpackPerl_pp_packPerl_pp_sortPL_patleavePL_perlio_fd_refcntPL_perlio_fd_refcnt_sizePL_perlio_debug_fdPL_runops_stdPL_runops_dbgPL_revisionPL_versionPL_subversionPL_interp_sizePL_interp_size_5_10_0PL_force_link_funcsPerl_Istack_sp_ptrPerl_Iop_ptrPerl_Icurpad_ptrPerl_Istack_base_ptrPerl_Istack_max_ptrPerl_Iscopestack_ptrPerl_Iscopestack_ix_ptrPerl_Iscopestack_max_ptrPerl_Isavestack_ptrPerl_Isavestack_ix_ptrPerl_Isavestack_max_ptrPerl_Itmps_stack_ptrPerl_Itmps_ix_ptrPerl_Itmps_floor_ptrPerl_Itmps_max_ptrPerl_Imodcount_ptrPerl_Imarkstack_ptrPerl_Imarkstack_ptr_ptrPerl_Imarkstack_max_ptrPerl_ISv_ptrPerl_IXpv_ptrPerl_Ina_ptrPerl_Istatbuf_ptrPerl_Istatcache_ptrPerl_Istatgv_ptrPerl_Istatname_ptrPerl_Itimesbuf_ptrPerl_Icurpm_ptrPerl_Irs_ptrPerl_Ilast_in_gv_ptrPerl_Iofs_sv_ptrPerl_Idefoutgv_ptrPerl_Ichopset_ptrPerl_Iformtarget_ptrPerl_Ibodytarget_ptrPerl_Itoptarget_ptrPerl_Idefstash_ptrPerl_Icurstash_ptrPerl_Irestartop_ptrPerl_Icurcop_ptrPerl_Icurstack_ptrPerl_Icurstackinfo_ptrPerl_Imainstack_ptrPerl_Itop_env_ptrPerl_Istart_env_ptrPerl_Ierrors_ptrPerl_Ihv_fetch_ent_mh_ptrPerl_Ilastgotoprobe_ptrPerl_Isortcop_ptrPerl_Isortstash_ptrPerl_Ifirstgv_ptrPerl_Isecondgv_ptrPerl_Iefloatbuf_ptrPerl_Iefloatsize_ptrPerl_Iscreamfirst_ptrPerl_Iscreamnext_ptrPerl_Ilastscream_ptrPerl_Ireg_state_ptrPerl_Iregdummy_ptrPerl_Idumpindent_ptrPerl_Iutf8locale_ptrPerl_Irehash_seed_set_ptrPerl_Icolors_ptrPerl_Ipeepp_ptrPerl_Imaxscream_ptrPerl_Ireginterp_cnt_ptrPerl_Iwatchaddr_ptrPerl_Iwatchok_ptrPerl_Iregmatch_slab_ptrPerl_Iregmatch_state_ptrPerl_Idelaymagic_ptrPerl_Ilocalizing_ptrPerl_Icolorset_ptrPerl_Idirty_ptrPerl_Iin_eval_ptrPerl_Itainted_ptrPerl_Iperl_destruct_level_ptrPerl_Iperldb_ptrPerl_Iorigargc_ptrPerl_Iorigargv_ptrPerl_Ienvgv_ptrPerl_Iincgv_ptrPerl_Ihintgv_ptrPerl_Iorigfilename_ptrPerl_Idiehook_ptrPerl_Iwarnhook_ptrPerl_Ipatchlevel_ptrPerl_Ilocalpatches_ptrPerl_Isplitstr_ptrPerl_Iminus_c_ptrPerl_Ipreprocess_ptrPerl_Iminus_n_ptrPerl_Iminus_p_ptrPerl_Iminus_l_ptrPerl_Iminus_a_ptrPerl_Iminus_F_ptrPerl_Idoswitches_ptrPerl_Iminus_E_ptrPerl_Idowarn_ptrPerl_Idoextract_ptrPerl_Isawampersand_ptrPerl_Iunsafe_ptrPerl_Iexit_flags_ptrPerl_Isrand_called_ptrPerl_Itainting_ptrPerl_Iinplace_ptrPerl_Ie_script_ptrPerl_Ibasetime_ptrPerl_Iformfeed_ptrPerl_Imaxsysfd_ptrPerl_Istatusvalue_ptrPerl_Istatusvalue_posix_ptrPerl_Isig_pending_ptrPerl_Ipsig_pend_ptrPerl_Istdingv_ptrPerl_Istderrgv_ptrPerl_Idefgv_ptrPerl_Iargvgv_ptrPerl_Iargvoutgv_ptrPerl_Iargvout_stack_ptrPerl_Ireplgv_ptrPerl_Ierrgv_ptrPerl_IDBgv_ptrPerl_IDBline_ptrPerl_IDBsub_ptrPerl_IDBsingle_ptrPerl_IDBtrace_ptrPerl_IDBsignal_ptrPerl_Idbargs_ptrPerl_Idebstash_ptrPerl_Iglobalstash_ptrPerl_Icurstname_ptrPerl_Ibeginav_ptrPerl_Iendav_ptrPerl_Iunitcheckav_ptrPerl_Icheckav_ptrPerl_Iinitav_ptrPerl_Istrtab_ptrPerl_Isub_generation_ptrPerl_Iforkprocess_ptrPerl_Isv_count_ptrPerl_Isv_objcount_ptrPerl_Isv_root_ptrPerl_Isv_arenaroot_ptrPerl_Ifdpid_ptrPerl_Iop_mask_ptrPerl_Imain_cv_ptrPerl_Imain_root_ptrPerl_Imain_start_ptrPerl_Ieval_root_ptrPerl_Ieval_start_ptrPerl_Icurcopdb_ptrPerl_Ifilemode_ptrPerl_Ilastfd_ptrPerl_Ioldname_ptrPerl_IArgv_ptrPerl_ICmd_ptrPerl_Ipreambleav_ptrPerl_Imess_sv_ptrPerl_Iors_sv_ptrPerl_Igensym_ptrPerl_Icv_has_eval_ptrPerl_Itaint_warn_ptrPerl_Ilaststype_ptrPerl_Ilaststatval_ptrPerl_Iexitlistlen_ptrPerl_Iexitlist_ptrPerl_Imodglobal_ptrPerl_Iprofiledata_ptrPerl_Icompiling_ptrPerl_Icompcv_ptrPerl_Icomppad_ptrPerl_Icomppad_name_ptrPerl_Icomppad_name_fill_ptrPerl_Icomppad_name_floor_ptrPerl_IDBcv_ptrPerl_Igeneration_ptrPerl_Iin_clean_objs_ptrPerl_Iin_clean_all_ptrPerl_Inomemok_ptrPerl_Isavebegin_ptrPerl_Iuid_ptrPerl_Ieuid_ptrPerl_Igid_ptrPerl_Iegid_ptrPerl_Ian_ptrPerl_Icop_seqmax_ptrPerl_Ievalseq_ptrPerl_Iorigalen_ptrPerl_Iorigenviron_ptrPerl_Iosname_ptrPerl_Isighandlerp_ptrPerl_Ibody_roots_ptrPerl_Inice_chunk_ptrPerl_Inice_chunk_size_ptrPerl_Imaxo_ptrPerl_Irunops_ptrPerl_Isv_undef_ptrPerl_Isv_no_ptrPerl_Isv_yes_ptrPerl_Isubname_ptrPerl_Isubline_ptrPerl_Imin_intro_pending_ptrPerl_Imax_intro_pending_ptrPerl_Ipadix_ptrPerl_Ipadix_floor_ptrPerl_Ipad_reset_pending_ptrPerl_Ihints_ptrPerl_Idebug_ptrPerl_Iamagic_generation_ptrPerl_Icollation_name_ptrPerl_Icollxfrm_base_ptrPerl_Icollxfrm_mult_ptrPerl_Icollation_ix_ptrPerl_Icollation_standard_ptrPerl_Iutf8cache_ptrPerl_Inumeric_standard_ptrPerl_Inumeric_local_ptrPerl_Inumeric_name_ptrPerl_Iutf8_alnum_ptrPerl_Iutf8_alnumc_ptrPerl_Iutf8_ascii_ptrPerl_Iutf8_alpha_ptrPerl_Iutf8_space_ptrPerl_Iutf8_cntrl_ptrPerl_Iutf8_graph_ptrPerl_Iutf8_digit_ptrPerl_Iutf8_upper_ptrPerl_Iutf8_lower_ptrPerl_Iutf8_print_ptrPerl_Iutf8_punct_ptrPerl_Iutf8_xdigit_ptrPerl_Iutf8_mark_ptrPerl_Iutf8_toupper_ptrPerl_Iutf8_totitle_ptrPerl_Iutf8_tolower_ptrPerl_Iutf8_tofold_ptrPerl_Ilast_swash_hv_ptrPerl_Ilast_swash_tmps_ptrPerl_Ilast_swash_slen_ptrPerl_Ilast_swash_key_ptrPerl_Ilast_swash_klen_ptrPerl_Iglob_index_ptrPerl_Iparser_ptrPerl_Ibitcount_ptrPerl_Ipsig_ptr_ptrPerl_Ipsig_name_ptrPerl_Iptr_table_ptrPerl_Ibeginav_save_ptrPerl_Ibody_arenas_ptrPerl_Inumeric_radix_sv_ptrPerl_Iregex_pad_ptrPerl_Iregex_padav_ptrPerl_Ireentrant_buffer_ptrPerl_Icustom_op_names_ptrPerl_Icustom_op_descs_ptrPerl_Iperlio_ptrPerl_Iknown_layers_ptrPerl_Idef_layerlist_ptrPerl_Iencoding_ptrPerl_Idebug_pad_ptrPerl_Iutf8_idstart_ptrPerl_Iutf8_idcont_ptrPerl_Isort_RealCmp_ptrPerl_Icheckav_save_ptrPerl_Iunitcheckav_save_ptrPerl_Iclocktick_ptrPerl_Iin_load_module_ptrPerl_Iunicode_ptrPerl_Isignals_ptrPerl_Ireentrant_retint_ptrPerl_Istashcache_ptrPerl_Isharehook_ptrPerl_Ilockhook_ptrPerl_Iunlockhook_ptrPerl_Ithreadhook_ptrPerl_Ihash_seed_ptrPerl_Irehash_seed_ptrPerl_Iisarev_ptrPerl_Imy_cxt_size_ptrPerl_Imy_cxt_list_ptrPerl_Idestroyhook_ptrPerl_Ibreakable_sub_gen_ptrPerl_Iregistered_mros_ptrPerl_Gcurinterp_ptrPerl_Gthr_key_ptrPerl_GYes_ptrPerl_GNo_ptrPerl_Ghexdigit_ptrPerl_Gpatleave_ptrPerl_Gdo_undump_ptrPerl_Gop_mutex_ptrPerl_Gdollarzero_mutex_ptrPerl_Gsh_path_ptrPerl_Gsigfpe_saved_ptrPerl_Gsv_placeholder_ptrPerl_Gcsighandlerp_ptrPerl_Guse_safe_putenv_ptrPerl_Gperlio_fd_refcnt_ptrPerl_Gperlio_fd_refcnt_size_ptrPerl_Gperlio_debug_fd_ptrPerl_Gmmap_page_size_ptrPerl_Gop_sequence_ptrPerl_Gop_seq_ptrPerl_Gmy_ctx_mutex_ptrPerl_Gmy_cxt_index_ptrPerl_Ghints_mutex_ptrPerl_Gperlio_mutex_ptrPerl_Gveto_cleanup_ptrPerl_Grunops_std_ptrPerl_Grunops_dbg_ptrPerl_Grevision_ptrPerl_Gversion_ptrPerl_Gsubversion_ptrPerl_Ginterp_size_ptrPerl_Ginterp_size_5_10_0_ptrperlsio_binmodePerlIO_arg_fetchPerlIOUtf8_pushedPerlIO_modestrPerlIOBase_poppedPerlIOBase_noop_okPerlIOBase_noop_failPerlIOBase_eofPerlIOBase_errorPerlIOBase_setlinebufPerlIOUnix_filenoPerlIOStdio_modePerlIOStdio_get_basePerlIOStdio_get_bufsizPerlIOStdio_get_ptrPerlIOStdio_get_cntPerlIOStdio_set_ptrcntPerlIO_vsprintfPerlIO_sprintfPerlIOUnix_oflagsPerlIOBase_pushedPerlIOPending_pushedPerlIOCrlf_set_ptrcntPerlIOBuf_set_ptrcntPerlIOBuf_bufsizPerlIOBuf_get_cntPerlIOBuf_get_ptrPerlIOBase_clearerrPerl_PerlIO_fillPerlIOCrlf_get_cntPerlIO_getposPerlIO_setposPerlIOBase_filenoPerlIO_getnamePerlIOMmap_unmapmunmapPerlIOMmap_mapmmap64abortPerlIOBuf_poppedPerlIO_list_freePerlIOBuf_get_basePerlIOMmap_get_basePerlIO_list_allocPerlIO_allocatePerlIOBase_readPerlIOBuf_readPerlIOPending_readPerlIOBuf_pushedPerlIOStdio_filenoPerlIOStdio_flushfflushPerlIOStdio_errorferrorPerlIOStdio_setlinebufPerlIOStdio_clearerrPerlIOStdio_eoffeofPerlIOStdio_tellftello64PerlIOStdio_seekfseeko64PerlIOStdio_writefwritePerlIOStdio_readfreadfgetcPerlIOUnix_tellPerlIOUnix_seekPerlIOUnix_writePerlIOUnix_readPerlIO_sv_dupXS_PerlIO__Layer__findXS_PerlIO__Layer__NoWarningsPerlIO_tab_svPerlIO_list_pushPerlIO_clone_listPerlIO_debugPerlIOUnix_refcnt_decPerlIOUnix_closePerlIOPending_set_ptrcntPerlIOPending_seekPerlIOPending_fillPerlIOBuf_tellPerlIOBuf_seekPerlIOBuf_writePerlIOMmap_writePerlIOCrlf_writePerlIOBuf_flushPerlIOMmap_flushPerlIOCrlf_flushPerlIOStdio_closefclosePerlIOBase_closePerlIOBuf_closePerlIO__closePerlIOMmap_closePerlIOBase_flush_linebufPerlIOBuf_fillPerlIOMmap_fillPerlIO_layer_fetchPerlIO_define_layerPerlIO_find_layerPerlIO_parse_layersPerlIO_default_bufferPerlIO_stdioPerlIO_perlioPerlIO_default_layersPerlIO_unixPerlIO_rawPerlIO_crlfPerlIO_mmapPerlIO_utf8PerlIO_removePerlIO_bytePerlIO_default_layerPerlIORaw_openPerlIO_popPerlIOCrlf_binmodePerlIOCrlf_pushedPerlIOPending_flushPerlIO_releaseFILEPerlIOStdio_pushedPerlIOPending_closePerlIO_cleantablePerlIOBase_binmodePerlIOPop_pushedPerlIORaw_pushedPerlIO_pushPerlIOBuf_openPerlIOBase_unreadPerlIO_pendingPerlIOBuf_unreadPerlIOMmap_unreadPerlIOCrlf_unreadPerlIOStdio_unreadPerlIOStdio_fillPerl_PerlIO_unreadPerlIO_apply_layeraPerlIOBase_dupPerlIOMmap_dupPerlIOBuf_dupPerlIO_resolve_layersPerlIO_tmpfilePerlIO_reopenmkstemp64PerlIO_stdstreamsPerlIO_stdoutfPerlIOUnix_refcnt_incPerlIO_exportFILEPerlIO_findFILEPerlIOStdio_dupPerlIOStdio_openfopen64freopen64PerlIO_importFILEPerlIOUnix_dupPerlIOUnix_openPerlIOUnix_pushedPerl_Gppaddr_ptrPerl_Gcheck_ptrPerl_Gfold_locale_ptrPerl_cast_ulongPerl_cast_i32Perl_grok_numeric_radixPerl_my_atof2strtodPerl_scan_octPerl_scan_binPerl_scan_hexPerl_hugePerl_pp_scalarPerl_pp_regcmaybePerl_pp_lineseqPerl_pp_scopePerl_sv_nolockingPerl_save_opPerl_save_freepvPerl_save_freeopPerl_save_mortalizesvPerl_save_freesvPerl_sv_insertPerl_magic_setfmPerl_magic_setbmPerl_newHVPerl_newAVPerl_magic_setglobPerl_oopsCVPerl_hv_deletePerl_hv_fetchPerl_hv_existsPerl_hv_storePerl_hv_store_flagsPerl_hv_delete_entPerl_hv_fetch_entPerl_hv_exists_entPerl_hv_store_entPerl_pack_catPerl_packlistPerl_unpack_strPerl_unpackstringPerl_cv_ckprotoPerl_sv_usepvnPerl_sv_usepvn_mgPerl_sv_setsvPerl_save_listPerl_save_nogvPerl_save_ivPerl_save_longPerl_is_utf8_string_locPerl_uvuni_to_utf8Perl_pp_rv2hvPerl_pp_bit_xorPerl_pp_sqrtPerl_pp_logPerl_pp_expPerl_pp_cosPerl_pp_popPerl_pp_hexPerl_pp_rindexPerl_pp_sgePerl_pp_sgtPerl_pp_sltPerl_pp_lcfirstPerl_pp_dorassignPerl_pp_dorPerl_pp_orassignPerl_pp_andassignPerl_pp_semopPerl_pp_msgrcvPerl_pp_msgsndPerl_pp_shmreadPerl_pp_syswritePerl_pp_fteexecPerl_pp_ftewritePerl_pp_ftereadPerl_pp_ftrexecPerl_pp_ftrwritePerl_pp_symlinkPerl_pp_killPerl_pp_utimePerl_pp_chmodPerl_pp_unlinkPerl_pp_ftsvtxPerl_pp_ftsgidPerl_pp_ftsuidPerl_pp_ftpipePerl_pp_ftdirPerl_pp_ftfilePerl_pp_ftblkPerl_pp_ftchrPerl_pp_ftsockPerl_pp_ftzeroPerl_pp_fteownedPerl_pp_ftctimePerl_pp_ftatimePerl_pp_ftmtimePerl_pp_ftsizePerl_pp_ggrgidPerl_pp_ggrnamPerl_pp_gpwuidPerl_pp_gpwnamPerl_pp_gsbyportPerl_pp_gsbynamePerl_pp_gpbynumberPerl_pp_gpbynamePerl_pp_gnbyaddrPerl_pp_gnbynamePerl_pp_ghbyaddrPerl_pp_ghbynamePerl_pp_msgctlPerl_pp_shmctlPerl_pp_msggetPerl_pp_shmgetPerl_pp_localtimePerl_pp_ftbinaryPerl_pp_lstatPerl_pp_getsocknamePerl_pp_gsockoptPerl_pp_fcntlPerl_pp_seekPerl_pp_recvPerl_pp_readPerl_pp_dbmclosePerl_pp_dofilePerl_pp_dumpPerl_pp_keysPerl_pp_valuesPerl_pp_mapstartPerl_pp_padanyPerl_init_i18nl14nPerl_do_execPerl_do_aexecPerl_do_binmodePerl_do_open9Perl_do_openPerl_av_fakePerl_hv_magicPerl_sv_taintPerl_hv_iternextPerl_gv_fetchmethodPerl_gv_efullname3Perl_gv_efullnamePerl_gv_fullname3Perl_gv_fullnamePerl_printf_nocontextPerl_fprintf_nocontextPerl_sv_utf8_upgradePerl_sv_pvutf8Perl_sv_pvPerl_sv_pvn_nomgPerl_sv_pvnPerl_sv_pvutf8nPerl_sv_2pv_nolenPerl_sv_2pvPerl_sv_pvbytenPerl_sv_pvbytePerl_sv_pvn_forcePerl_sv_nvPerl_sv_uvPerl_sv_2uvPerl_sv_ivPerl_sv_2ivPerl_sv_catsv_mgPerl_sv_catsvPerl_sv_catpvn_mgPerl_sv_catpvnPerl_sv_force_normalPerl_sv_2pvutf8_nolenPerl_sv_2pvbyte_nolenPerl_sv_unrefPerl_refstrxfrmPerl_new_collatePerl_new_ctypePerl_set_numeric_radixlocaleconvPerl_new_numericnl_langinfomodfPerl_sortsv_flagsPerl_sortsvboot_DynaLoaderXS_DynaLoader_dl_load_fileXS_DynaLoader_dl_unload_fileXS_DynaLoader_dl_find_symbolXS_DynaLoader_dl_undef_symbolsXS_DynaLoader_dl_install_xsubXS_DynaLoader_dl_errorXS_DynaLoader_CLONEdlsymdlerrordlclosedlopenlibdl.so.2libm.so.6libpthread.so.0libc.so.6__environ__stack_chk_faillibcrypt.so.1_edata__bss_startlibperl.so.5.10GLIBC_2.0GLIBC_2.1GLIBC_2.2GLIBC_2.1.3GLIBC_2.4GLIBC_2.3GLIBC_2.3.4GLIBC_2.11GLIBC_2.1.2                 ٌ ii 0ii ii 0ii ii   ii   si (ii 4ii >ti Hii Tii ri _ii  Ђ  $(,048<@DHLPT`dhlptx|ăȃ̃Ѓԃ؃܃  $(,048<@DHLPTX\`dhlptx|ĄȄ̄ЄԄ؄܄  $(,048<@DHLPTX\`dhlptx|ąȅ̅Ѕԅ؅܅  $(,048<@DHLPTX\`dhlptx|ĆȆ  $(,048<@DHLPTX\`dhlptx|ć̇ԇ܇ $,4<DLT\dlt|Ĉ̈Ԉ܈  $(,048<@D`dhlptx|ĉȉ̉Љԉ؉܉  $(,048<@DHLPTX\`dhlptx|ĊȊ̊ЊԊ؊܊  $(,048<@DHLPTX\`dhlptx|ċȋ̋Ћԋ؋܋  $(,048<@DHLPTX\`dhlptx|ČȌ̌ЌԌ،܌  $(,048<@DHLPTX\`dhlptx|čȍ̍Ѝԍ؍܍  $(,048<@DHLPTX\`dhlptx|ĎȎ̎ЎԎ؎܎  $(,048<@DHLPTX\`dhlptx|ďȏ̏Џԏ؏܏  $(,048<@DHLPTX\`dhlptx|Đ  $(,048<@DHLPTX\`dhlptx|đȑ̑Бԑܑؑ  $(,048<@DHLPTX\`dhlptx|ĒȒ̒ВԒؒܒ  $(,048<@DHLPTX\`dhlptx|ēȓ̓Гԓؓܓ  $(,048<@DHLPTX\`dhlptx|ĔȔ̔ДԔؔܔ  $(,048<@DHLPTX\`dhlptx|ĕȕ̕Еԕؕܕ  $(,048<@DHLPTX\`dhlptx|@ddddd  zLĖ~Ȗ$̖T,W0  $(h,048<@.DHLPTX\\`dhlptx|e2 3U3qėXȗ̗&ЗԗؗoܗG{p5 @ $:(/,048<@XDH\LLPT,X\J`%dhlptx|. $TNAĘȘ>̘ ИԘkؘTܘ/   '" $(S,.0488<@DgHLPqTX\q`d/hlptjx|!K&P XJKęlș̙&Й2ԙ ؙܙ8IH:Z RFp K$(,048]<@*DHL{PTX3\j`dhhlrptx|}Jm{:W7ĚAȚ̚КԚؚtܚdyQk4Xk'f  w 9$s(,0B48<@DHL4P.TX\`Edhlp*tx9|;bkRL:_NyH]wě>ț̛ЛlԛH؛̜М,Ԝ؜ܜ d>O  $(_,%048<@DLPsT>XM\q`?dhlpmtmx|MC{ Lĝaȝ ̝Нԝ؝~ܝeHR ]j B$z(,-04s8<@DHLP0TXn\j`dch_ptx/|(rA;"7x|ĻȻ̻лԻػܻ_&sĞȞ\̞ОzԞ-؞ܞ -`p Ybw\ $0(,048<T@cDH<L+PTX\`dIh1lp tx|){&$G^$Mğȟt̟Пԟ4؟oܟPaW5 LA $(,"0418<@[DHLUTCXy\(`d h~lpotx|6l|v33@@IJ4Ȳ̲}вԲز ܲKt'S0 | $=(R, 0i4i8i<i@DHrL&PTXn\`dhlptx|U<<[ssEEZijȳ̳г}Գسܳ-FTVVal c3 $(,048<6@DHPT)XR\`tdnxnhfpS 6@,2zĴjȴ`̴д6Դش,ܴyy>lF  QWU $0(,4d8<@z`zlzDHLEPTX\axad}h}pt|xxcc88**EĵEȵE̵EеEԵEصܵ44444444 44448 $(,0 8 < @  4D(HNLNPTXK\;`dshl@ptx|^^ATJ)99#iȶiܶiM̶MMĶжԶضTTt???  $(,0458]<@DHLPTX\`dhl@pt<x|5`ķȷ̷зԷ (4<Dx|ĸȸ̸иԸظܸ Ĺعܹ $(,048<HL`dhlptx|ĺ48L`dļмܼ(,04@D"""""P"","0"4"8"<"@"D"H"L"P"T"X"d"p"t"x"|""""""""""̹"""""""P"T"\"̺"к"Ժ"غ"ܺ"""""""""" "$"(","4"8"@"D"H"L"P"T"X"\"`"d"h"l"p"t"""""""" """"" "$"(","0"<"H"P"T"X"\"h"l"p"t"x"|"""""""""""""ȼ"̼"Լ"ؼ""""""" "" "$"8"طeܷeeee=8@Ⱥ= =$=,=0H5LTX\`dhlptb $(\`hIlIDȹйԹ  @zDX=!0! <@D<HzP`hdhHĽ̽l r$DdL IaľF>j#{ N$%@0D`+dĿS(@DCd4p444W$,(pIpxtxx)pxn||' 9,,880880844>>8>>8>e  $(e,w0g4x8<@DHpRRttx'x''   ))))))\\ \n<@@bDbbDbHHLk  $=('Lp{|F`D8v$(< a $(,048<@DHLPTuXE\R`Gdhlup t<x-| su G  D  ĠȠ1̠РԠؠ@ܠk,? | $(,i04^8 <@DXHsLGP\TX\`dhwlptx[|4m9DL&ġȡ̡_Сԡءܡa p $J(,?048<@D~HLPTX\5`-dh lptxg|Y!"#+FEx|}$ĢȢC̢1ТԢآܢ%,&'()*+R ,-/nV .$P(,)0/48<@D0H1LP2T3X\`idhlpxt2xv|AB456Y78}\9:ģȣ*̣dУԣأܣ;<L=  p  A$S(^,C048<j@DHbLPTX\`sdfh7lpdtKx|>l?@Ae+fBCXDĤȤ̤ Ф.ԤؤܤEF642D( GH"t I$ (,0P4!8<J@D_HLKPTzX\L`JdhLlp?tMx|N|OPQRSTUfUĥVȥ ̥VХԥ`إ;ܥWXY gTZ [ \$(,0]48<^@_DIHL`PT(Xa\`dhlbptcxW|dV~ZfghijkVlĦmȦG̦ЦԦnئpܦop&;q5yr sh K$(,t04u8v<@D7HLwPTX+\x`Vdhylp2tx|] M,ZC ħ{ȧ̧|Чrԧا"ܧ/!}~  H l $(,04T8u<@D9HBLPVTfX\`Ndh'lptx|xz9QĨȨ̨Ш;Ԩبܨk7D P y$.(,048<(@DHLwPT#X\;`1d#hlp'txc|Qdv<#8 ĩȩM̩Щ%ԩ[ةܩyJ\ N3 $(,048<@DHLZPTX\`$dhlqptx|iv~A"2U[Ī Ȫ̪|ЪԪتܪ(:1 CVY @$(,04<8h<@DHL PTX3\`*dmhlptx|l0Z?Oīȫ̫Ыԫثܫ[ / 9q u= $:(o,04b8<@fDrHLPVTX\`IdWhl$ptxZ|,_F(U*ĬPȬ.̬ ЬQԬ)جܬY<oeX D#x |$(,048<@DRHLPTX\`dhlptx|cug6Cfhĭȭ̭!ЭԭحܭSn ` $(,a0~48<@DHLPGT*X\m`dhlptxx|<l%iĮȮM̮ЮԮQخnܮg*i>-   y$L(,04r8<?@MDHLOPTX\`td{h!lptxG|+]h8įȯ̯xЯԯدܯin0z [ @ $L(,048<@mDH:L4PrTX\`%dhlpMtx|ZUS[,,tN BX[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhh h h h h h( h0 h8 ph@ `hH PhP @hX 0h` hh hp hx h h h h h h h h ph `h Ph @h 0h h h h h h h h h h( $h0 (h8 p,h@ `0hH P4hP @8hX 0<h` @hh Dhp Hhx Lh Ph Th Xh \h `h dh hh plh `ph Pth @xh 0|h h h h h h h h h h( h0 h8 ph@ `hH PhP @hX 0h` hh hp hx h h h h h h h h ph `h Ph @h 0h h h h h h h h h h( $h0 (h8 p,h@ `0hH P4hP @8hX 0<h` @hh Dhp Hhx Lh Ph Th Xh \h `h dh hh plh `ph Pth @xh 0|h h h h h h h h h h( h0 h8 ph@ `hH PhP @hX 0h` hh hp hx h h h h h h h h ph `h Ph @h 0h h h h hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh h h пh h 鰿h 頿 h( 鐿$h0 逿(h8 p,h@ `0hH P4hP @8hX 0<h` @hh Dhp Hhx Lh Ph оTh Xh 鰾\h 頾`h 鐾dh 逾hh plh `ph Pth @xh 0|h h h h h!h!нh!h!鰽UVSê@l&u]t$p&)9s p&p&9rƃl&[^]US.+@t0t $Ѓ[]Ë$ÐU(}} ]u?tlj]u}]Ít&wtAt?VtftvVu>?뽋ET$$ݍ&?롋Et$$밍t&'UE tH]UU E9r v]ø]fÍ&9Pfr]ÍUЉVPt+ub@tN@vԍw5@t/Ht&qt&tt@9tv1^]Ívu^]ËIɍvu@lUWVF%=tw~e=tn=t&f=t&t>=uYV1t)FPQF|^^_]Í&`tTv1^_]Í&==}=t1t&Ӎt&tNu1FtVwf=e=uvF9?9^_]-"1@vb1-t&*1v'UE u1]fP w@=t@ ]Í&UE HQffBt]ÍAuQB vuH@]Ð&UE ]Ð&UE PJ]Í&'UVS0uE <@D$4$4$D$D$ D$D$D$D$D$ D$4$D$4t<@@ t @ 0[^]Ð4$D$ D$D$00[^]Ðt&0[^]Ðt&UVS0uE $!;@D$4$4$D$D$ D$D$D$D$D$ D$4$D$Tt<@@ t @ 0[^]Ð4$D$ D$D$P0[^]Ðt&0[^]Ðt&UH]IF:uƉ}׉$D$D$ |$4$D$ESE@ t@ ]u}]ÍD$ "D$D$4$ύv'U(}}]uu ê9@F@FFf%f[VBJf%Ff BD$!<$tGV|ff]t1f[ȃ^D$ LkD$D$!<$7v]u}]Ðf]ff\u[vAf%Ff wAb뻍vU8U]Eà8uu҉}}tED$T$4$kEtD$D$4$PEtED$4$D$2tD$|$4$rD$4$hU]uƋB7t0D$k4$D$4$D$]u]Ít&R FŐt&U8uu ]}}Ê7Ff%f Xt]rD$<$Ntsuf,sD$LsD$U$&5st&‹uGf%fGGD$M $UyD$D$E$GE@ L$M $AU܋HBEHGG@G7& Es) 5s>s'Uuu ]sp0F%D$FD$E$FF ]u]ÐU8])&0D$:$u։}EͿtpfU8uu]}'F$4$EE D$4$@D$+P4$D$Pt.t*t%$UU|$T$$ljPE]u}]ÍvUWVSLGD'EB B(D$ED$$wtxtvUD$:D$$t[HM؋x ET}vt<׃9uUE܉}܋}؃ ҉MM܋<9}x t;vE90tMMt1F u$袺L[^_]ÍF(vPEԉ$E@뮍ǀ0맍t&UWVBtKrtDN w!t$vu^_]Í&'UWVS,} ã%utGtu<$躹,[^_]ÍGf%fEG@t&f=f} f}DffGt&t'Gt &PUD$4$zEuf}t/f}t'f}tf}upG f=t f=vG$G G$GG $ݸG,ttft$¸G04$D$|$4$GG,[^_]Ðf=sf-f\ $MWM܅ugW W $U茼U܅u(,[^_]f=osD$lD$ T$$sD$lD$ T$$'UWVSu Ã#}P,t @=;@,@=uqH$tj~ <$'D$!\<$D$LJ\G@$<$D$k@$@ <$af@(t$<$UFuP4t@<@4P<uJtx$t @$P<fP<[^_]fP"sD$<$v@ <$D$荢f`<P<딍$T$<$XVt&UWVS,E ! D$ D$D$M $~U҉EE UB HɉMtDx u.Up$:D$E$KML$E$衡D$ U$MEA UPA @ D$M $肰UMH(ED$U$MUP,fH<MH$ED$U$EU E,[^_]Ðt&UU܋B(6*B 1"t M`ptt`PEE܋U܍lB=u*tM D$D$L$ E$IU`pt&H B t]Wt&UtXtD$ E$)MEH(ED$U$謿MUP,fH<MH$UfH<E,[^_]Í&M@ML$E$ED$ U lD$T$M $[ UWVSL}|$ ED$E D$E$E<$tEEU$[EEE܃$‹ED$E$D$U|UԋE E $|$D$MZD$E܉D$ Uԉt$T$U$EUPM؋H,L[^_]Í&Et$D$U$ޫL[^_]ËE|$D$U$nD$EL$t$D$ U$MfM UWVS`$9t`ET$4$ E``4$D$+`tA4$@tjXD$4$蕝`4$D$@`XG tH G Dt t&1UD$4$裚UBU䍃ttD$ED$4$D$ D$ED$蔷MJ fJ<t`RE$LE4$E~E<[^_]Í&E뇍t&'U8}} ]uuG4$E䍆XD$脯4$D$E4$D$D$軶XED$ D$4$D$@ǀ@3|$4$蔼]u}]Ít&'UWVS ,uD$,$U f@f% ЋU fGGEGEG@tO tO 4$D$詛xy4$D$A@ @GbD$T$4$ҙt U <TU |$4$,[^_]Ít&D$4$@D$4$D$4$D$G@ wt&D$D$4$EU5|$4$U 4$D$ mD$t&'UWVSMuEU e=}1|EUxyvG  @EЋW F D @E̋N MMA M%EEM@G L}F ORuNTE}pu: }E̅} 1fF=u}ЅE1f1uU.u]u}Wf:N9E~F;M}΋u}4wf>uڄ}~҃f9EvMtEH@|MT$ $x}t$<$EUe3p[^_]ËEHHF }OBtD$EDD$ $MM̋}ЉpMEEpD$, $D<iE <:tDžT DžXMM1}4 um؃4݃<{ D $uD$PL$4$D;tl t1Eȉ}։EUEt$HT$UD$ )D$$UHu9v > UD9r}D$ t$<$D$蜗M1҉ME1ɉu։Eύ& M)EDHD$ D$E|$$D$+ED$ ED$lD$E$GHDEMED$ D$EL$$芬MD$D$ L$l@L$M $ؠ@+ElD$D$ EL$D$E$觠DD9rx;u׋UL$MD$ T$ $UuD$+E$t$D$ lD$=MlEEL$t$$D$D$  MUD$ D$ $T$kUuD$+E$t$D$ lD$lQ @D<$EЍtDuuME̅meuN;t _tLMt1ɉ`t\ltDždEEEEhUt&}9p}u }dEE`EL$D|$}Ht$ D$<$͝DHUEt099);}fE)t9~Ѕ0T$hE@HT$U|$t$ T$U$H@HUuo9skv)fvfvf)v3=v=v =9}9EsExEt09t9UEU҉Eut= w =UBH$ E@Uo|$}t$PD$T$ <$t$<$D$D$#)UBW<$D$豐}W}G4NE<$D$茐l<$T$zHt}t U̅#EtuN@T<$X$AxEЉUE̋EoMIU`fẺD$EDD$ "t$$^DEUED$ "D$|$$2[}EvEM1E EЅ~1t& fN9EE11M }fF=t/f=FtT9 t&F tD$<$yF ]u}]Ð |v|$F$tV@<$D$DVT$<$D$趻V`VHFD$<$D$v=#fUffFD$D$<$jFf}zF<$D$'F FD$D$<$F sFNFgF$ŚF-t&F$<$D$էdt&F$UD$D$<$蝧@uEԋMԉyMAf%uAEԋUԉYUBf%f~Ef EMԋ 9Mut'Pft%fEfutQfʍ&gF6uP`uD$E$YBFVffVMȋQVu\t&NAf%fABu_x}B EB tD$ D$EԉD$}<$MU耋U<$T$EzEM~hVBf%f=SRBf%f >D$ B D$U`$D$MMB%@=@tD$ D$D$ D$D$D$ D$@D$}<$UM_UMEEЋ8G x9G x x} A EA tD$D$D$ D$ EԉD$MЋ@ @D$}<$U֤U}@@  @ I t B  B t$D$ Eԉ<$D$mD$$F@ ;EMA`_A@ "HMAHEԋUԉuEPffUԋMA(}ԋBf%fBUԋB@ JxE`1B$g)ǁUBtE辿Ff%fUԋD$M $贃EԉD$U$袃Mԋ@ FFNVVffȀFffNuy@tF@P V @ ND$E$u}}ubET$D$ "D$}<$UM}MUESD$ D$MA $D$U蝓}UGHF<$D$UuU)D$#}<$荰u>WfMVAz }B @ox e}<$UD$D$ U<$T$D$E腎ED$#<$D$ ,mD$Tu^I UJ>WffWW҉UJffw9rnN|$M $EE}ЋD$U$E>E2D$ $Uݱ}UGUԉzfG}sQff` ɉMSIfffMf}~t f} (My fB Qff%QQfBR҉URffUM;Jf}~o}~EԋU@ EM;J d}UGBMID$}<$E}EHffuD$<$E}ED$U$E}ED$M $E}E}U`tT$ D$D$D$D$@0D$M $UbU@ M`D$D$D$T$ D$@0 $D$@D$ "M$D$L$U衯UEЋED$D$M $}VGP z?D$<$>N*~ zyuUuM`D$D$D$T$ D$@0 $D$;D$D$E$Dx%xt&y @I@}Eԋ@EЉ}MQffEU@EBUI@E};<QEE}URffUHD$ "D$T$<$*1ED$ "D$|$}<$UMĭM}UEԋ aD$M $zD$ D$Mԉ<$L$|`1It&UHuu ]}}}zFf%f=t f=`Fƒ@t VfffUFtDFMȁeMM䋓tl@uhFu`UffiM䋃EEt6D$-<$Zt"U䍃mD$D$-<$T$ 蕋]u}]Ðf=fF ==f=&vҍf떍wFt$<$Gl@aYVNu׍&|$4$Hwuu%FFt@f%ftEN2F.Et$<$7xt$<$lF@f%f!tftf#$t&tMDVoBf%f ]R$RtD$<$蔘;vF<t&#Uȋf1fVFUȋf0fVFUȋf/fVFUȋf.fVF*FP}u׍|$4$xuu+MD$-<$yM܄teVЃ Et}E!EuBQUt^ٞztɋU{Eft$<$EzV G L$M܉<$ΤMztQUL$M܉<$蠤MztQQ tD$D$$UU܅Lt$D$D$ߝU܅'/D$D$$躝&U8uu ]}}(t VFf%f==V==t&=t& Vu(vvT$U<$sURgJu܉T$U<$豢U=Ut&=t&t=D$-<$ΣtnD$D$-<$t&]u}]Ð=|FPtߍ&T$U<$URu뽐t&=v=Ft&tNtVtfT$U<$͡URurf=u͋F<$D$訡W&VT$U<$芡URt BtT$U<$qURu$`vNWAf%f EI$:tD$<$蒓V'U8]uƉ}Bmjf%f$t4$T$Ơ]u}]Ðt&B@f%fuщUD$4$Ut`xtt `A0nD$UD$4$`xUb&UWVSu 覥ã}t%E @tptft$<$vuE [^_]fU8}}]Muu IFt uOV%=I t&~tZft[t$<$XƉ]u}]Ív=o=ft^=z=uS}*iɉL$ F%D$F<$D$Rjt$<$֞yvɉL$ D$F<$D$"j}~t }}~ Vt}` ЈFN & t tFɋEL$ BvFPɉu։M䍴&Et$<$D$ ED$jivuߋu&}rV@Fv=vt=vB1Ft&2EɉL$ D$F<$D$hNt&v}*ɉL$ D$F<$D$h}v=}*t}t }gF@t&ffV@DFF@<$D$lnNf[vN&NQ&N&U(uu ]}}V%~J~D$<$ttD$D$<$v]u}]Ð wf fV@,Ft$D$ D$<$@g밋fʇfVFD$ D$t$<$gtt&U(uu ]}}V% tpt+D$<$']u}]Ít&f~fVFD$ D$~t$<$ef봍&f fV@(Ft$D$ D$~<$(frt&tD$D$<$R~NUWVSE }t4E @t+pt$fEt$D$ <$D$evuދE [^_]ÍvUXuu ]U蠟Ý}t ~EN%=fME}&}}t=F NM$M/}}tF]u}]ÐFfE%Du=`D}Nf@묍t&Nt6u΋M׉Mt&Et$<$D$ѕvuMuME&~f}E䋋T%9<-t&ȰFt&$UD$蹙UԄFf%f=iQD$ duD$D$${<D}2F $UԉD$褄UD$F$%D$FF UEt&}E^}D}$xf}!}#fD$ D$F$UԉD$bUԁ}EpBFt fF F@AD$D$E$t$D$ D$M $gƋMVyfff~Eft}uf tf t&u~D$ E$UIUԄt[f#t f!u‹f t }MtM܉L$L$D$ ED$ D$M $U+UfFHHE\U&ff#ffv@fFtzf#tn‰D$ED$M $U~DNUff#tXD$E$UZGt$ D$U҉T$M $M4} `t[L[^_]ÍvFtNEff#uD$E$Gt$D$@D$D$ M $0} `uD$E$FD$D$`D$ M $)L[^_]Ív'UWVS,E LuE@@UBf@yxD$4$D-MyGffWGD$D$4$U |$D$ 4$D$MUNjA;AExGWf% fG@4G|$4$EG!W/T$4$UEUzB|$4$rEWUBf%f=itzUE,[^_]SfG@WD$4$tFfHpD$D$4$(G,[^_]TT$4$P,fyE,[^_]Ðt&$D$D$4$FD$D$4$D$ NjExx(fD$ UD$4$T$2WD$4$|4D$D$4$D$ D$ MD$4$L$u2UzlvD$4$?UWVSUSE HD$D$D$ E$#[]ÍUSE GՇD$D$D$ E$h#[]ÍU8uu ]}}GÊFf%f=t]u}]ÍvID$D$ D$D$<$D$D$<$D$ <$D$*t$ D$<$D$.D$D$<$D$ "avU8]FƆ} uu}}Gf%ftefD$4$D$4$D$ E D$J6E|$4$'E䁎@]u}]Ðt&GtE D$4$D$)볐Gf%ft*f=td|$ D$@D$4$"뒍G@ t@ B&D$ "D$D$4$D&G@u|$D$4$"_t&'UWVS,uFEC} F4|$4$Et VT$U4$4$*4$UV4$!EF4GWf%~fGgGGGFL@FLUD$D$D$ 4$]GU4$T$%|$4$|$4$ǃ,[^_]Ív|$4$t&UHuu ]D}}Ft VfffUFtDumFUȁ_v=&t&tt&tt$<$+]u}]Ðt&uV<$T$UUu֋vtFt$<$r vu⍇$u䉇`svFt&FPRu׍v|$4$0uu-t&AFEvt$<$K&Vt4uft$<$ vtNut$<$u䍇$`t&F<$D$Ft$<$_u"EUMfuЋ~xFMUt>t:E9Ev2<%t+<@t'<;t#<_tUċEDU $EHE fE Ĝ[^_]fEWEGf%fff=EL$M$8M&EGf%f+uSt&E|$$ EE|$$}fftUċEC}$vt-vT$Uԉ$E|$MG9G(f@@t&‹@uzBPffMPA GT$UMEED$$9|$EE$UMD$T$ UL$MT$ $L7UED$D$$D$ EЉHUQ:vGf%f f=vUċEMFB|$D$EGf%f ff=fҍt&UċEMA|$D$Ezt&D$]4$MM9E%t&Gf%f t f~AEAL$ MUD$D$ $}EAEЉHU}t\tXuGf%ftu;UċEM A|$D$dGf%f=fGYvҍuЉt&8[uEЋUċEM@‹EЉUD$ +EЉD$4vD$E$ U|$T$$UԋE$DMt&PUЋJUfW ‹E PUM|$$wMuFf%fU BEEEEht&au FEEEE8WGM|$ D$U $D$UPEЉH(QRrffb?gUċE%?U $EBE u FxŰuRvUċr V thùN UċEM>U|$D$$EUyBMdUċEM>U|$D$ŋvutuF t:Ux<x@(EċuF t:@EV UU EEBEEEEuD$EMD$ t$$7MEE륄'UXE]8xuu}} t9|$4$i2D$D$B4$D$ ]u}]Ít&dT$UD$ D$ D$4$UtH y uItyxsD$ D$D$ D$D$T$ D$4$D$/-#P J J yD$ D$D$4$D$D$4$D$ 4$D$/1|$D$4$D$ D$@D$4$D$ [4$D$o(&'UXuu ]}P6MvFfftaFF@xt2WBf%Kff PfFFf%f=]u}]fUBыR R7D$ D$D$ D$D$D$ D$T$ $.t"@ @tN tN@FffF@u2Vf%f=z-|$}<$t&FxՄD$ED$D$ D$$)HUD$D$ D$$D$HWBf%f=>RJR%JAf%fAHffMIM@M8};XHAIabxJAf%fIAf%fnAMM;X@Hxa@y1f?tNBf%fRu NBf%fSuNVBHJ}D$<$fET$U܉$UBf%f=tU1f=t}EL$M܉$FMf%f=tuNM|$ $t& 멍}D$D$<$&t&Ff%f=t$JgU|$$,wMT$U܉ $@U܋J-M}"fOfftfuG$t,Nj9u؉}J1xM}xbv1fUWVSLU1Óqu}[v`|$4$U+M4$L$+Uԉ4$T$D$(|$D$@D$ Uԉ4$T$JǃL[^_]f|$4$U}+4$D$D$$D$ NjE4$D$P+Uԉ4$T$D$=(|$D$D$ Uԉ4$T$NL[^lj_]ÍUv;F<UBf%f!D$%T$4$'E܋džE܉4$D$5'4$D$|$4$E'4$D$UԉT$D$ U D$%4$T$EE MAUBf%f=fu z MQpE;UM}׉M<`W @ p9PP9E}Gf%@tfPfvftMf~ff=fff uG$tV9XXv};UtMI@tGf%f=}L[^_]Ít&Gf%f.U4$T$(D$$4$D$%|$4$E(UԉT$D$ M D$$4$L$(džL[^_]ËM܋Q31ɉ}؉։E&FxvFf%Pfvftf+tعэt&WF9Xp9P P t&|$4$&UBf%fvSvU<$T$MMBt&ɉ}4;W4Bf%f "MAf%f~V&x Iv@ȍt&MA@c@S@ 80뉉D$4$5s UWVS} `uUOf%ff ^OG EG |$1UM4$UԋMҋUMBf%f f~fu B T$4$@D$4$D$EE|$4$vU4$D$T$D$ MЉ4$D$L$D$ 4$D$UψPD$($MMԉH lj4$D$D$U$|$ 4$D$ T$U D$D$ET$D$E D$MD$ E4$D$D$Č[^_]ËJAf%f=A@EЋHMȋAMЉEĀaAD$EȉUD$D$D$ 4$NEHEЋMЋEȋIEMĉMAU4$T$E4$D$E@ZED$ D$`UM4$D$UM8G @E }1MEЀ8$x_MfGfEfOI8OOMAf%fEEEBf%f ET$D$ D$4$X4$D$4$D$pD$4$D$E@E+EUMD$ "D$|$4$MUEЋEAN ;X5M,frUD$4$UtCD$ D$`M4$D$tMU@ME%@=@XUD$D$D$ 4$ UEE4$D$pD$vv'U8]E\uu}D$4$4$D$4$NjED$4$D$|$4$D$D$ E D$]u}] UWVS<}vs[uMUGf%fE A҉EAf%fE@0GU܉M؉4$D$D$D$4$D$ D$ D$4$E䍃CD$D$D$4$D$ M؉4$L$EWMD$4$L$D$ MD$4$L$ D$QD$D$4$D$ U܉EtJfftG@0nU 1Q4$D$ D$D$4$D$D$EM؉D$ }|$ 4$D$D$AE~4$D$D$D$ BU܉4$D$T$ D$gM؉4$D$L$ D$L4$D$ D$ǍisD$4$D$D$D$ |$4$D$D$ D$ED$@ǀ@3<[^_]ÍO&U܉D$4$D$D$4$D$ qM U܅ɉEnvUD$ D$D$4$+U܉U܉D$ D$D$4$U܉4$T$ED$4$D$ ED$|MD$4$L$ D$D$D$4$D$ ut&pvD$ D$D$4$zUJ@0BE6pD$4$ QvD$4$ UWVS<9W`D$4$4$D$ D$D$4$D$D$4UM܉4$T$UL$D$E T$ D$&4$N<[^_]fP]f4$4$D$ @'USËU4$zUUUT$UT$ U $T$UT$4[]Í&'UES4EED$EUD$ ED$E D$E$=4[]Ít&'UWVSTLEE4$ 1G D$4$ǀ}B @wvD$ D$D$ D$D$ T$ D$D$4$ +94$L[^_]Ðt&P G DR&U ‹E4$D$U4$D$D$D$ U4$D$T$ D$'|$ 4$D$D$ExU4$D$T$ D$4$D$ ǍD$|$4$D$ D$D$4$L[^_]Ðt&nt&4$D$ D$b4$D$ D$D$64$>L[^_]fT$4$8@ @(UWVSEMUÊRuE}eE1EE}UMu }EtF@ @ EEtG@ RU@ EU.D$ L$FD$E$DEEtt$uD$4$tED$|$$}tUMD$T$ $tuVƒ FEEuUD$ Et$$D$oUX$D$jMǁXEt ǀMu 9q$~ t$ $Ue3E< Ĭ[^_]ÐUX@<aWu(txtMD$# $EUMD$D$ET$ $D$ EMuD$L$4$}tuF p EMU҉tuU:u }f1EUH$ EMT$UD$EL$ $D$Ct EV}MD$ $E U`Htt E`PElB=u*tUD$E|D$T$ $5U|`HMEL$$!EvFMWUMD$D$ T$ $Up P$MfH<fH<EB(MD$ $Eu$t$UX$D$gMǁXvUT$U|D$ "D$$ U|҉EU1UX8EtL$MD$ D$ $ET$x|D$ED$ED$ vD$E$rx|B :EL&uvD$D$#4$KU@=@MT$ $.t$D$E$[fBUX&}tfUuMX@<f BM$ut*Evftf*tvD$ pD$D$ <$}1UWVSu vs5}t%E @tptft$<$vuE [^_]fU(uu ]}}5FPffV@uqHtt$<$]u}]ÐHffu@@tу@VD$<$D$D$<$D$ YVBFt&@ut$D$ F<$%D$Af@Ft$<$HƋ@fUWVSU 4BM̋M A @t%tuE M EЋqFf%fNf;] EMMMt&ENt ufU Bf%f=i( $U EE E Č[^_]ft$U$5M̉L$D$E$NuЉ(Ff%ffff(U B%=t-=L=&t=u&}4EEEFt$U$MgD$ ED$D$U$ƋEȉF UVMNMЉ1t$E$Nt$ D$D$U$MOFt$‹E$UUM։JMЉJFf%ff Mt$L$E$N^v}̖t }̓u ɍt&"Ff%ff Et$D$U$!Nt&1M UQ8Af%f=i_$U EoE E Č[^_]Í}uJu }t$M $NmfU EmE E Č[^_]Ít&vt$E$N)F@it$ŰMD$$UԋEt&F@t$UM̋D$$UԋE8t&~ FEЋvU Bf%f=i<D$mqt$$UԋEMxMNMЉ15D$ D$FD$E$M/D$D$D$ U$`D$E$ED$U$[Mt$U$MEȋMƉHUЉ1D$ D$FD$U$M蔼D$D$D$ E$ŽD$U$ED$E$Mt$E$M3MUȉJMЉ։fF@FD$ D$FD$E$MD$D$D$ U$U MBu 9rnt$U$EMEM6v=t1=t&=t&fv}t&EFf%f ff=f=tmFEtZv҉Eu 1vUċUBf%f=tf~u UȋR҉UtRff fvE EċỦt$T$E$MMEąD$D$U$MMEȋEUȋ@UzpUĀ:$t*D$ D$ED$U$MMD$ED$ EĉD$UT$E$M豷ME`E^E D$U$ExvD$D$ M̉L$E$E f=vf~t&DfE=fŰD$EԉD$FD$D$ (qD$U$MUE̋D$UԉT$FD$D$ \qD$E$MFf%f=-ŰE`EE"EFuUЉƉL$E$VURffEȋU@R@PUċ@ED$U$M~MŰD$D$ qD$E$MD$T$E$MqU T$M $D$ F D$U`$D$MMB tA@ER UT$E$MMT$M $ED$ "D$T$E$MtMEsD$ UȋB D$U`$D$M?M@  D$ UȋB D$U`$D$ MP Eă@D$ET$D$ vD$U$MM@ t6@EB EĉT$U$M貴UċMr]vET$D$ "D$E$UMXMUE멋EPE@E@D$ED$ @D$3D$ UȋB D$U`$D$MD$ D$D$E$MB&USE &D$E$@txt[]fPfBttJ []Í&RvU8uu ]U}]Z&FxtOtt$$蟷]u}]ÍЉUFqGUύ&'UE ]u%ptPfBt/tJfft$D$E$]u]ÍvR̍vB@t։ɀHbȍt&UE ]usp%ptPtJfftD$E$衶]u]ÍvB@tމɀHbЍt&UH}} ]Uu$GptFf%ft |$$8]u}]Í&$UD$UtƋN%MptNDF@D$D$ q$UL$L$D$D$UkvUVSE 74$u@tQPRtGRt@PffPTPD$4$Q4$D$[^]fD$4$0PJtQffuҀa[^]U(]E Ó#uu}xD$4$ܴ|$4$D$]u}]Í'U(uu ]}}-*#Fut$<$芧]u}]ÐD$<$tҋF@%%t t u w vD$D$<$qD$D$<$m&UWVS,E vs"}PD$<$сM跳Et.@t(pt!&Et$<$D$vuE,[^_]Ít&'USE !D$E$H[]ÍU(uu ]}}ú!FtF@tPtBf%ftt$<$]u}]fD$B<$D$%̍&UWVS<} FC!uGf%f=fEdGEG@Gf}@D$4$W|$4$;‹t  B@f@1MxMAf%f EfAE EEHT$4$UJMIAU܅MArD$4$U&U܃|D$ D$`4$D$U܋@%@=@tJE@Bz x B@tgxt`|$D$4$0uU<[^_]ËE@BD$M4$L$U'MA U܋B@uBf%f=iE<[^_]I|$4$Nj@HQu ‹uD$$M M܉EGgf}@D$4$葰D$$UŧU܉E|$4$UCT$4$UwU)+wD$4$U8]E VS}}uD$<$蠯Ht)PBf%f=t0f=t"f=urT$<$]u}]ÐɀND$ FT$U<$%D$谣UBf%ftt?t6N@Ff%f=itRD$rD$<$Ff%f=it0D$qD$<$t$<$*묉t$<$΍&'USE D$E$X[]ÍUSE D$E$([]ÍU8]E ãuu}D$4$P@t4xOtz0u;ʀPE|$4$bE]u}]ÍtӁt>Pffit8ҋD$PrD$4$JʀP@@뇍t&D$4$Ƚƍv'U(E ]uuí@@t-D$4$PJQfft$]u]f4$D$P]u]fL$4$EeEȍt&UWVS<9Tz&J9At&<MȃH-t&'U8uu ]}}-*FtF@f%ft!t$<$iƉ]u}]Ít&\D$D$<$D$ 肠D$D$ F<$%D$聭t$<$EE UWVS<} vsGGM|$U $譡t0@t*pt#}EEt$|$$vu}WUJMԋqt:FVf%utpf tjf~tdf t^f=t&tTEԋUD$$MqWBff% fWGE|$$ؠǃ<[^_]UWVSlu} SPfEt }7XD$ E|$4$D$赤tG?$tB}vD$ r|$D$4$薞4$D$躪}EfUt2X҉Ul:ruO:r>1f}D$L$UD$|$4$T$ 6fl[^_]Ðt&f*vGEăa<EăA<BtEă@<=}_=Eă EEĀ}^ED$w$U؉M>U؋Mԅf*tvD$ w|$D$4$4$D$6t&rW:QTM&XJ< fJ:t[u B<wː:u t݋u 밀 uvE  t-pt1L[^_]Íu Ãu m9uC4$UȈMPUȀ=< D$+EԉD$ EԉD$UЉT$E$膅M̀mt)UЉ} T$ED$M $,u PE D$eD$ D$MЉL$E$뛋Eƀ(M+GL[^_]ËUƂ u tD$$xMǁu 0<  U4@ t r@ D$M $JUu eU,$踯E HM @ < z < r < t&e < ] < U < t< t< t< ft< t U u)ʉT$L$M $DU,u >u 1>-D$U$D$;kU$D$~D$ƍvD$M $菳D$NjE$Eԉt$U$ܛ9ErGt$M $țEF 0 V G  G MԉT$$L$( s|$ D$t$U$|$M $vE$wăT$ LT$t$$yt$U$vM $OwlT$$xE$2wT$$xD$U$蝏Eƀ%UPttt $u MǁPU`0$v(T$t$$GxMfE$~v|$UԉT$$x>uD$M $$EdBE HM Pt=:Uuǂ?$}u L[^_]ËM%%MƁUƂEt&$EI|E HM @t(v< t< t< t < t< wM uۍD$M $jEƀ"UFE N„tc t^ tY tT tO t&u0>< t%< t&t< t< t< t&t U uыM)‰T$D$E$UD$M $讖u u &u PvPvPЀ v<_tۍvCE u D$U$ߓMXƁ]UE4$D$su ~x~FE ǀ~?u)‰UUET$ UD$T$D$M $葨ƋE E91Em D$D$E$藮U4J 9vOv2v(vvv ҃T$D$M $1D$ t$U4@ $D$MM4v2v(vvv ЃBU4H 4!OD$D$M $st$D$ D$E$襏u u&$EsEƀ#u EƀMƁ!Eƀ%UPttt $贄u MǁPhU+D$ D$tD$$wvEED$ ED$D$t$M $uE4E DQD$+uԉt$ UԉT$MЉL$E${(D$D$D$ UЉT$M ${E )‰E D$T$ D$EЉD$U$r{6D$D$ '-}#D$D$U$hMƉ4D$M $D$ksD$D$E$ٌNvED$D$E$Uu 1Ҁ>0ƒU܋x ED$ E܉t$D$D$M $.u u]1Mԋ}ԉM ED$ э|D$U$hƋE t&E JvJvJЀ v߀_tڀ:tՀ=fD$+EԉD$ Mԉt$L$E$y} F }F D$D$M $&|t$E$mLP@H9H-HЀ !<_U D$D$U${M EED$D$E$EUƉ4f< t< t< t< ft< t u t&< t< t< t< t&t< t<-t t&t)ʉT$L$E$D$ D$D$$lj‹E*<$讣@ @ @Bd+~ zR V  I N IhdE D$D$4$D$ D$蠠4$D$qD$4$D$h@t|d+V QR V  I N Ihd,[^_]Ðt&D$D$ 4$̠hPhB Ttx t*4$]DT$$fD$4$}@ @t̋@ uv'U(]E ƣuu}D$D$4$D$4$ljD$|$4$c8Utsl@ tdPt;tVRvml@ @ t@ D$D$4$wvu+tF Єu]u}]Ë@t&t݋@ 80ΐD$4$D$ "D$D$4$uct&U8E]膢Ãuu}}D$E D$ 4$|$ D$rP J u RE |$ 4$D$E D$詞D$D$4$D$ uD$D$4$D$D$ |$4$D$Ú]u}]ft@ H u @ސt&1ՍU]yvuu 4$*~Ut$T$ D$E$]u]Ív'UH]&#E}ueE1D$|$$迎~m@tXt$D$/<$tHt$ |$D$$Ee3u@]u}]Í&t렋D$D$$:nI&U(])&uD$D$ D$4$D$Ypt@ $]u]Ð&UWVS躟÷HP R҉UED$D$D$ ED$D$4$#} E9U t(E90XE 8u&E E 8D$=<$ft9tՍ@)D$ED$$D$D$$t$ |$‰D$EU؉D$E$"U؀}yET$$E E 8juƆD$D$ D$D$4$mt2@ `\D$G 4$D$\G H!tD$D$4$赈<[^_]E HE{t&D$4$v@ @EUWVS\YuTXLTHE$D$訂H$L$D$TAh FT`Ƃ#@MD$ t$$L$6*F xF 8fxƍo$PxP9PD^+P=MP< t< t< t< t&t< t?u"4< t$< ft< t< t< t&tu܍t&?;PvBP@fF~PЀ v<.t<_t <-t&9r֋@9Pwot"r9Pov? Gt&< t< tL.8 $vL 8P_PL$D$L$985P < t< DP)Ѓ9t,P9PD < t < t&U  TBht,ыRt;t$jyT;BtBhTBp;|t$荏(T;ApTHTD$D$@D$ $s[^_]< < < t&7D$T$辎f< < < uҋU T|;xtBit ;BpRE$׃UTT$ $~D$ D$D$$rcEU <-TPpt*9UM9ƅu퍃D$T$蹍t&Txg$؍sT;xHyD$ $ovTD$ "D$t$$ʕd@p? h:TTD$ $TE$D$}ML$ D$D$T$IfT$D$GM\TL$$|D$D$$҈Tt$ $D$D$\TD$$rTt$D$$iTvuĀ>-MċUăMBUԋMEEUUEU9t .UčAM4$vhMԉt$ $ljD$AcD$ D$D$$Ɖ‹Ez9UԉD$ED$D$ $D$zWMED$|$ L$$t$XWU$MD$D$ D$T$ $,W4$脂@UԾEƂ$MЋEQ { r t&d [ R}t^}MMEЋUԉD$$tEv@ R De_"EUԉD$0$D$b!MEEEMċEԀ+ E*Uԋ0Em7MUƂZMԀ+Ɓ EԍjD$ D$D$$VEԍtD$ D$D$$)EԍD$ D$D$$EԍD$ D$D$$EԍD$ D$D$$EԍD$ D$D$$uEԍ̆D$ D$D$$HEԍ߆D$ D$D$$EԍD$ D$D$$EԀ+UE狊0 D$D$$F_MԉEEEЋUԋ`@ $[Mԋ`@ ` $D$wEF Uԋ8- D$<$HED$Eԉ$mD$D$$yEЋUM|$D$ EԉT$Uĉ $gED$$`[(UԀ&)Ex$E觼Mԍo&R v< t*< t&t"<#tt< ' <  < űutE$&g ED$ $}UԉXfH<X0$D$$NtGMԍhD$D$ D$ $D$~TJ@ FpuD$ED$D$ D$$ATNjHG p@P>MԉU $DUBB Eԉ|$$^UԍYD$D$ D$$D$SJ@ FpMԍ`D$D$ D$ $D$SUԉTHT@ p@P>>$PzGG MԍgD$D$ D$ $D$=SJ@ FpED$$jUԉ$3zMԍD$ $n{Uԋh9MԋXt@y$6KtƍmMԃ\UԋMЋED$ $L$D$nMED$L$$X~Uԉ$}W`?Mԉ $_|UԋMԋ`@TƁX0tD$ $AEǀ0h:CU% Mԉ $]UԋB0;B4Mԉ $xEǀ\Ĝ1[^_]ËED$PL$$TpD$ $yUԋl@ P}ЍUD$D$$|$ D$N|<$D]EUԀrEЀ8(E1҉$E`Uԉ$ApEЋEЅ=Uԋ0=T$T$$ISMԉ $D$"D$0vlD$ D$D$$躿t\MԋPtOz uIR tBRt;Jt2nD$D$ BPL$D$Eԉ$J]UԋXt\Mԋ@tOz uIR tBRt;J t2nD$D$ BPL$D$Eԉ$\UԋXt\MԋTtOz uIR tBRt;J t2nD$D$ BPL$D$Eԉ$\UԋX5MԍtD$D$ D$D$ $N@ 0EԋXЃUԍD$ D$t$$?]F @Uԉt$$vft&MԀ* $D$D$tƍ Eԃ\yED$ $D$yUԉ0EWY$UFt‹ED$ D$D$$8F$Fu Bf t t t t t-OOEMu& t t t t t-M|$U $?EU?< t< t< t < vt< uՋUЉtu7Eԉ+uƀ ƀ+v0; MԉD$ $SfՃ tʀ tŀ t t "f뮉t&낋Uԋ$D$D$qxGMM<KD$D$$tCEỦD$Eԉ$U{mEQMЍD$ $@ZEUMԍD$D$ T$ $D$8UԹEЉƉE%uƇEE̋EU)D$t$$lMԉ $D$ZG@ E$$K0`$ D$mMԋ` $D$3PUԋT$D$.wMԉ $NWfM$D$L$PvD$EEԉ$ bMԋU $T$ƍD$lR9UԉD$ED$D$ $D$E߆MD$EԉL$$$RUԋ EԀ&uƇD$,ET$UԉL$ t$D$(D$$E$D$ EЉD$?D$D$|D$I`MԍƁ&D$F $D$Dt$EЋEԉ$8UMԉT$ $8_~TEƀ+ƀ < 2&< t< t<-fFNPЀ v <-t<.t<_uMăD$4$L$l{GD$Eԉ$qbuU&EUԉ|$D$$4UUEEEUEEEEEUD$$LstMԍD$D$ $UED$D$$uEԋ4T$T$$_JMԋ`D$ B $D$D$9mb$?D$ D$D$$‹E趶./D$ED$ t$$UpMԍ(D$ D$t$ $UJօD$Et$$lD$Eԉ$vlMЋuA0< HD$ D$4$vIPЀ vEE[]UWVS Z7 3 Ldž|$4$D$ > dž@HvD$D$4$#l44$%T肭t1׹*󫍻pdžƆdž@džDD$4$,^4$D\4$9D$ 4$gD$ 4$gD$|$4$`k D$D$ |$4$MD$D$ |$4$M,D$D$ |$4$MD$ 4$g4$D$D$j8@ 4$^D$ 4$f`߉D$D$4$r/$/P>D$ 4$jfdȇD$D$4$:ju.C+$E/U(4$D$ e@ 4$Ce,[^_]Í&D$|$4$a3|$4$g؋&|$4$xk D$|$4$(a |$4$g؋ d&džPd t2l@ 8G<vptKG D$ЇD$4$bfDD$4$bD$D$4$bt&D$ "D$|$4$jfD$|$4$pIGtU(]ku}$SƋ(tt:X;t,lnM y E u MAHE@EUpƀB9t E$MQ )E䋁pEt/UB EB0;B4M $5CEPE[^_]Í&$|^E4D$E$g-UB0B4t&Eƒ@E1EMȃhDEUD$$@MpADD$ $6aMEpEJE;PMpt&U1ɾ1 9rUMBE̋EEf% fE܋EEf% fEẺA&D$ D$|$ $EUQ$5GvEǀ@ǀDUTXB0;B4M@pt )ExU@;#/&U\Bǂ\9t M $EP )EEVD$ D$l@ $D$;CUl@ B%_BMl@ HD$WMA UMPEʁP$MA+vUBt&$3UvD$ $rYx@ @lxMT$ $[Ul@ BM $UBQEvUWVSEbÐ`1t U`@MEUELH< 800M,($MEL$$,#fEUD$$.M4wE9UM9EU9U0pD$ $8\,UE؉pEt5tA&:8UpEǀ@ǀDUM ;J}։f4$t=;~|UB0;B4lMTX$``UP@8҉p)E9UssM9t"9st9ostcD$D$E$V&4ED$L$$HqU\UTt x M $!W($T$"MA0;A4r $x0e&VEPD;PHPDM+A 4D$ $D$=Ul@ 0F @EEU$``UPME9UssM9t"9st9ostcD$ D$Et$$.*}<$!;U 9W8MpuMt$D$ $T$MtD$ $}9EǀUǂ$D$1Mǁ4$>EU@,pƂ%@DD$$RM@EƉpE!q@Up[^_]ÍE09t:u090}4tJfr9t4t/9v+r9w!8u t&ЀxPu9M=Et00u$1B9r4t 9t&փ+0Mh>D$E$OUh1@MƁ蹵EƀU<$T$EU [^_]ËEǀ@ǀDU,;J}ω֍t&4$2;~|UB0;B4MTXtD$, $D$ UtD$,$L$ E@$hRU|h>uvD$D$U$#EAtV04&V9tt29s.V9w$8u xpuAuË0tU0v1E $UE萿UtD$,$L$UD$,$L$rUTtx tvM $K T$$xUM| $JeT$t$$L$?$vB9 c@ @t@ urUWVSU3S0E)oM $/UB0;B4=M $&7E$t EU$`t@MR0tR R\R QD$E$3UǂMǁ $D$Eǀƀ$,UU $D$fMǁ  $D$GEǀMB҉~0΍P4$T$B҉؋U$3IMǁǁ $D$M9t)9u( 4M94E D$E$+UH RփtT<%Bt1But@D$M $2 ufUD$M $EǀǀUd$D$Mǁdt)tD$ $ ,UǀM":U,ƂƂƂƂ Ƃ!Ƃ"Ƃ#Ƃ%Ƃ&Ƃ'Ƃ($ZGMǁ, $D$U0tD$$Mǁ0EǀU<$D$Mǁ< $D$EǀU4$D$bMǁ4$FEǀU$D$%MHǁǁ $D$EǀHU@$.FMDǁ@$FEǀDU8$EMǁ8ǁ< $D$|U$D$gM $D$RU$D$=MH $D$(U$D$ML $D$ U$D$ MdǁǁǁǁǁHǁǁLǁǁǁǁǁlǁ\ǁ`ǁPǁTǁ8ǁhǁpǁtǁxǁ|ǁǁǁlǁǁ $D$ EǀdU$D$ Mǁ $D$ EǀU$$D$c MPǁ$ $D$D EǀPUL$D$" MLǁLǁH$MCEǀLU`$/CMǁ` $D$ EǀUd$D$ Mh $D$ Ul$D$t Mp $D$_ Ut$D$J Mx $D$5 U|$D$ M $D$ U$D$ M $D$ U$D$ M $D$ U$D$ M $D$ U$D$x M $D$c U$D$N M $D$9 U<$D$$ M@ $D$ Eǀdǀhǀlǀpǀtǀxǀ|ǀǀǀǀǀǀǀǀǀǀǀǀ<ǀ@UPtt t$MTǁP $D$9EǀTUD$M@ǁD$UTǂT$D$M $D$EǀU$D$wMǁ $D$XUB0;B4E<D$M $:+UBMA$UB4t!D$ |D$D$$%Mh@D$ D$D$ $%u{vU$MD$pEǀDU@$RM@[^_]fM@[^_]Ëut&4$, U1`$D$MǁR (@ ,0ܒ4ω0 ,4449(}ڋ,1$=M@ @@ $D$>U$D$&Mǁǁ $D$EǀǀǀED$U$gMǁǁ džU D$$&dž džuMKMǁ $EǀU$l;h$0;hu؉}G,$;UB@$;MA$:UB $:MƁ+Ɓ ǁ@ǁD $E$d Ut!֐$:uMrt7F>t~ gtV x$N:4$D:uԋUJ t8@ tR)P M`@ $:U$9M$9EǀU@[^_]ËVT$VT$ 0D$<$T$$) 4$9$D$<$!%t럍&$t&wp<@D$$C~u EuUBtD$E$76uUxt%Ut& ȉ 19u 1ЉUD$ E|$$D$*UB,[^_]Í,D$E|$$3vU |$}$U o=l}t$v92BDv1$t$|$]Á捴&:~wt&ƍǹ륍t&uzIuzG덍t&uJQfzS\zAR :t&9s0< v1f \(vRu:uP:vP:Q@:A R뎍t&'U(E ]uu;{@ t-RU@ M4$T$D$L$ (]u]ÐUT$D$ "D$4$a:UUWVSEv;s{xt1t,DtD$E$DCuك1[^_]Í&US$E ;{tP@tH u $[]Í&T$U$E"E@@ $[] UWVS\U :ãzJ ^p Q|1u4t~}&t&@HvA<w Fx tt6tNFH|:uыNtʀy uċI It9tҋ}9TtljU܉L$<$(76U܅uv}ċ9x J g&AuH y(O}M!MH `I$O}M䋿`O B @tN z I |}t;D$EL$ MUD$D$ $U1ƍt&\[^_]Ð&Uhuu ]9y}}tFt]u}]Ít&% wV tۋBBB(tU܉D$<$2U܋U܉<$D$U܋B<$D$U܋BEt H BU܉<$D$U܋B<$D$~U܋B<$D$lU܉$/F 9r uB fD$<$D|$ D$D$<$tmI MH EDEtTEdɉMtAMD$D$D$BAM<$D$ EL$D$"U܋BEċMĉU܉<$L$U&'U(uu ]E} 7 w~ u/~ Wt]u}]ÐD$ $\/GۍhT$$-'U(uu ]E}6Úv~ u/~ Ot]u}]ÐD$ $.Gۍ|T$$,'UWVSLE663vU}16T$MU E $T$EF tEMԉuuԹmwtZMUԉED$L$ M T$UL$$M T$UD$D$ L$$EM @D$PD$EL$T$ $uL[^_]ÐN R L4QUԋIM3vU M B_QtEL$$Z3룍t&'US$U4õtMB @ t-D$E щT$UD$ET$ $.$[]ÍvύUWVS,uV4St``@ `@ $EE}xt(U}׍ ȉ 19u 1‰UD$,$`U܉1t `@G$ET$ U4$D$T$j G(E GG ,[^_]Ít&xEUgt&U(uu ]E}-3*s~ u.~ t]u}]fD$$<ۍT$$6)v'UWVSLu 2r}FEEE}tstV ҉UtRUtWV ҉UtM%=EB D$T$<$"<$D$D$|(EEw"v @D$ t$<$WH VF%̀Ft$<$ F U҉tt$T$<$RED$t$<$D$ ED$0Mu }H}<$G)U܅E܋V <$D$ EUЉD$ED$yUЉBEԅ<$ <$D$pF @p(F @`@ UЉ<$D$)UЉB,F X@PMt(EUD$D$T$ F @<$D$$L[^_]ÍvUtyF @ F仉Ft&F f;t&HfD$D$<$L,V XB&F $'&UWVS}E eU1/oLT'E=T4dP_FFUčUƀ1rUEEBh@ u0D$D$ 4$U&hHhA U@@ Ad+~ yI N 8? <~8?<>hd4$U!D$F4$D$UVttX;tJ>4$QF)9EEMOE G MMGO4$Ft 4$4$qh @ d+V ?WR V 8? <~8?hpdUĈUEČ[^_]ËMAEx 4Et&@ED$cD$4$UMUM@EMEMMEM}E EEω}EEE} A % A FL@FL|E|$|$4$D$ NjEE GUWE t&D$  U4$D$D$}#ft&M?1Č[^_]Ít&EtE@tEEnUB B @ PB E}č}f} G sG @ fPB @1ҍEt&}čt$}|$}T$|$UD$ T$UU4$D$tD$My!4$D$Mt y D$uMD$4$fMMM}}mxvfvEMEEvA 9HČ[^_]Í&A "PǍ&A #@ftA8t@tA 80qA @Tt&9M `D$ L$M 4$L$E @t&A  xt&A @}=.}>$ME 1 LEMM ɉM- }}E E}EEv`D$D$D$ D$ D$B04$D$]pHfYfP MUUщM9HAE E))1t&ʞ}t&EE}PHUBfy 1&t&| Ѓ+vP fB1cD$L$4$RD$L$4$6D$L$4$D$L$4$D$L$4$uD$L$4$TEtXy ~GUE҉UME EEMEEEfMċUEEy ~uUMĉUUk}vUEEt&UEE/D$4$R 4$D$vU EEE U&EEELExD;E@8EED$4$UM 4$D$UMED$D$ 4EĉD$U 4$T$M#M@ E} EEEEE EE]E@(EE EEE E@$EE EEE E@ EE EEEmE P Bu<XEUEE@$ExUR EEEUEU҉UEEE!UEEE@|E.EEEEEEgx B T@ EB UDIEEMEE}L$4$_EE EEtE $D$D$ D$U 4$T$M@{@WB 806D$4$MMEE UEEEU EUR(EEEUE T$14$URHUR҉VLtB~Ly3UR$҉UE EEE 54URx҉U*EEEEEEEE LtxEEo Tt x 4$lDT$$D$4$E@(EEEEE dUEE T$4$MMEE@ @V@ QDMEZD$4$t&'UWVS:7ZEE4$EEYh@ `@@Bd+~ zR V  I N IhED$ D$dD$4$|h@d+V QR V  I N Ih4$d1E D$4$D$T$UD$ D$4$U؅E T$4$D$ E߉D$D$vE4$D$t&D$D$ 4$hPhB qTtx tK4$-DT$$D$4$kE 4$D$ E߉D$ЧD$ @ @t@ u렉'UWVSE}U e M1ɉDE߉@8@‰<9WJ}TP@P9PwDd8PDžL0DžH(4t&;TF9sm:t'u~~t⋅LL@+P<:9: F9ЉPrL+PfD`@$PPULD`$9D`@ `D$@$D$ L1t&DTLLLPDžHUe3H[^_]Ít&?*PGHA<t&~:~8LVDTL<]t&Y4<~, < $D$PD$h<:D:8L$0D$,D$D$D$ LD$D$ DžHtpHtd09HtVHx (L$ D$,D$LD$HD$D$6 ;4t $ HH90I ALLA H L@ LP9PDD$$5PDL$<$Pf<_f $ @+@ D$D$ LL$DD$ $  D8XL} wDAd}Z} P}fDu}uPa<$LPDD$|$D$D$ t$ L$$D9x }} t&} @@%PDD$DD$T$ $E@ x u(xt"PD$D|$$8A}t} #t} _+tD$dPD$D|$ $DBtH DD$ $ DD$ D$ D$D$<$L@ @Lo&HHK8PLD0D$D$D$t$ T$L$<$ <9H@Ѓ E0E@t ǁ8]8PLt$TL$HD$ DT$L$$~ uE$HDPPD`x,+D$ $3 PW:P1Hx HDL$<$@ @HQu$HDT$ $UHw @ D8$D$HA H|$D<$kDT$<$@ ٦@B  $Bsf\dHA 8uDL$$@ T$DD$ $D$C @ f@wHA 8uDL$$ @ D8D$$D$tu DD$ $D$HDp $D$k:kG:lWk:PDu`D$$EDD$$EDD$$EDLHHB @TuDT$ $@ @TTDD$D$D$ SD$|$$D1 $$򮋅$$ D$D$D$0уL$ TD$L$m t&ML$ D$D$T$U|$4$2UB HtfHL$MT$D$D$D$ I4$`D$@4$D$gM4$L$D$T$4$U@ H냍UWVSLM )!Ey UMEU؉Ef<:Brt<'uBzUuUu܉}؅U+UEuT$UD$ D$4$UԅEXE܋U؋u+E؉UE܉uE܋UuD$D$ ET$t$$?}t@ Hp$gL[^_]Ðt&MBr<:zBUuI#u`@4$D$ED$4$D$ P @$E fupvtnu nvt\E:U܋uED$T$ Ut$D$$} f9E܋U+EEE܉UU)u܉}MuGtqu܋E+uEu܉EOfx<x @(p 9NtЋHD$qL$t$ uUԉ4$D$UԅLEBuD$EUD$ t$$Uԅt$EUU܋u+UEU܉uUWVSD$cE {x&D$U$M ƋP A DMPP t;FuH;HxD$c} |$E$z1G󫋻uHDžDžD$D$ D$E 4$D$@ 0t,F@oDžO1SDžW D$|$ D$ M L$}<$_1tT@ @I(1NyBt Džt@DBCB<+ D$|$BBD$ M L$E$)kt&QI:>J:O1J:O$J:O6F y N Ltp 7F D$ F D$E D$U$@ @Dž덍t&ƒɉt D$D$ cD$t$} |$E$Č[^_]9Pv ЄF<DžD$ D$ cD$T$M L$u4$Č1[^_]Ë@yyF 80cDBudF @DL$}<$&?t$U$F ujI Kj u\L$D$8T$ D$t$}<$XV v 룐&UHuu ] }}u1]u}]Ðt&F t@ F tы@P@ D$cUM܉Et$<$UMʅt@H;Ht4Ut$<$D$ct$<$U@H;HűM9Hu.uv0< wlučt&9u4PЀ v<_t EUD$$޿U6ED$D$E$虺UEHDU+ED$ VD$D$ET$UD$$EH*Jx> U+ET$UD$ E$D$ UWVS\uóP;HxɉMHp9M+}āxt9}ĉ}t;M}&xxxx t t t߀ tڀ tՉ}ċHpE D$4$)M̉D$O4$D$Eԋ``}ԋRT$@ |$4$D$ D$-EċM̉|$4$D$D$L$ xPPT9!iD$4$赽Y `tl@ R`@ 4$D$D$Xt&[f˺M D$4$L$'4$D$軦Eԋ``RT$@ 4$D$ D$EԉD$Mԍ*|$ D$4$L$xPPT9`I)у|$PYMԉT$@XL$4$D$ D$蓤@Tt&Eԉ4$D$ fǀǀ\1[^_]ÍvHttQxp9vJ)ρM=}xtxt t t t߀ t&tր tѐNv@l t uex0 u_Bt&`R D$D$4$T$ Yt&}ԍuMD$D$4$|$ fH8]Ot&lUD$ D$ D$4$'Ũ1B @wT$ D$|$4$Ѣ@vU褯UʋDH@t.EUD$D$ D$|$4$O ){T$ D$|$4$gփ@rMčvUuu]E 4$D$裲1]u]Ít&'UWVS,ufcF$E䍆(XD$4$W$4$D$uXD$4$} 4$D$XUf P<`@(XD$4$UՖUB0XtGx4XP8E,[^_]Ít&U]ÆuuD$4$Bt!E D$4$D$ ҺD$}]u]Í&U])&uuD$4$t!E D$4$D$ ҺD$]u]Í&UWVSl@  Bn@u䍃9D$D$D$ T$4$+l@ @ @ UD$$ԭMGA&A f@NUuL$}M D$ $t$D$L$<$+ D$7GtF}G0;G4E$胭U䋂h @}䋗d+O JJ O R WRhdF<„҉uDSt$t$D$  $$UE UD$ D$E$D$t&E}D$ T$D$<$Evf<$輠vF @9U8f_@ut&MFN$MAD $D$D$ M‹hBhP D$ED$ "D$$PB 80vT$U$8M䋁l@ Ttx t0M $DT$$耑uD$4$M@ @tƋ@ u뻍UWVSU sp<9<1zMEUčcU;u W<_U̍P tыEȅtEȃ9EM̉Mvztf2zs;"t&Bzff2zi(zrzsfztt&zeztfzpBzof2zp"t&ziznfzdt&zNzIfzT t&zOzRfzEt&zo~zrfrzkb_t&zoNzr?s.+BzrA/,fBztf2zo(zez nfz tCt&Bzif2zr"t&znzgfztzhvzst&zezizfD$4$b{D$D$4$ v1wt&zlfze\znRzoB?t&zl.zlf"zezr vBzof2zp(zezn fzczafzlvt&zezsfzst&zazrfzmt&fzwBz y/,zr zpz az mz ez dz dz rzazmzizdrozibzdROzaBzm2/t&UWVSLM~{xpɉ}xt}䋸_HpM؉T$D$4$T4$D$ND$4${gM؄tz9}Uzxt:`@$E׃a<E׃A<}_UD$D$4$)щT$L$ au}EGpL[^_]Ít&`@$uR?w[&HvHvHЀ v <_t<:U䋆`@$uNjBlt@ uBt?v|$4$H뷋Blti@ tc`@$uW?M؉|$4$`M؄@x4$D$pM؄UzxPvB뚐9zp< t&t< t&t< t< t< t&fBx4$D$D$)Ǎ`|$ D$]`u~vU&M84$D$D$`u3&UWVS<貁ï< EJUR|9r t&< t< t< vt< t < u9r<(9s*< t< t< t< t < vu9׍vr֋`@$u-UBlt@ t`@$2B%PEWM t&HvcHЀ v[<_tZ`@$u8MAl@ `@$:&HwEuEH|9s*v< t< t< vt< t < u9r<,u()T$D$ |$4$UgU܅<[^_]fP<_E<[^_]À?|$4$\t|$4$mufB#:T$4$UwDU܉Mt&z(D$4${uhUD$ D$ T$|$4$qOt@ x u HE 4$D$.D$/uEtGWt5<))tt<(u鍴&< t< t< t< t< tt&t&D$$%Gt MED$4$D$ D$c\EUWVS,~rx;t,[^_]Ð< t< t< t< t< tԍt&D`@$uQ>wZ&PvPvPЀ v<_t<-uM`@$u΋@lt@ uBt>vt$<$=Bu<-tD$(4$Et;BpD$<$I`D$<$)ƉD$t$ D$ZU8]uƉ}|Ø}@ltL@ tF`@$u:`@$tC1ɉ|$4$L$ T$x]u}]Ðt&Btϋ`@$uÉT$U|$4$; UtfUWVS\EE{H J (ED$EЉT$UD$ $ZUĉƋJv xE<9}r&9v>\u;uԐtn}ЉUf@9uԉNȉUt&Plj9Mx\u9Mԉ|9\@\Րt&ŰMf@y;}̍D$T$ 1҉D$D$|$D$$ץƒ\[^_]Ív@Er fU\+z x농v8 L$ D$B Uĉ<$D$vUĉEUfUH]uƉ}zxEP\fx^Py/}؋}ƀ>yt$<$ [u܋}؋U)9UiMUԉD$|$ $HUԍ9U,UPUwUӍvM܍w`B$u;RltB t `B$tU܍wBt wJvJv_&U:B:UKv:Wr$hMw:ʃAE‹E+U<[^_]ËM܉t$ $#HuE܉t$$XukM܍ݹD$ $ aݹD$E܉$`'UH]jÆ҉uƉ}tVD$ $*:tD$"<$3|$ 4$'D$D$D$z`BYH^v&E^BYPv&@E}E됍&E}Ez @Ր&UWVS,EU iðu<E}1t<t289W|;}@ 8;E}y̅ɾuǍv,[^_]Ívt~Ez>9B t$ UB D$D$M $;MBM@,[^_]Ðt$ MT$L$}<$P$,[^_]Ë}@D$ |$D$E$-YuU$D$.P"1 vD$UT$M $WE}<$D$O1fU]M u֋gtDu BD$ t$D$$F1~F ]u]ÍL$ Ut$$T$%X]u] UWVS<_g\P4t ;P fP|t&9sT    v #t<[^_]f> 9rtfx^uӀtʋPl@EԉD$ $JtMrxJ|u)Ήu܃!u܋)Ήu؃!u؋uƉrprl6FB|pp)MUPt)MMBxtM܍t M؍xt>t2X;tlPp@|$)1҉D$6P|Jf <-t&뷍vP|9֍v<  &9< t< tfvt9&D$ D$@l<$D$CƇPlr ppptpxBl@ AB|ǀǀtE<$T9E<$D$?ǀ<[^_]ÍID$ D$@l<$D$B!n&'UWVS _LEvVzЉ NjMB< v_t.t;t t uwD$4$T$K-zOMċIMut}MċE܉L$4$UYUUāJ"E9 t { r}iaMuif1DŽtJ0J3J2ƂL[^_]ÐPUPUĉED$4$T$:E UWVSJ]G<Nj`@$u(@lt@ t `@$tHBu?Pv\PvT<_tPMt?:tDUt?'ft6<[^_]Ít&?v|$4$9tÉ|$4$JuvED$ ED$D$$+EԋE t.D$ ED$4$D$De}E䋏$MTD$D$4$D$ /MЉH@M}P0P3P2ƀ}ԃ<[^_]fUԉEԀ8(t@3&@3'UWVS[ x3t0ҍ&tD$pD$4$*4$D$6URJЀ vkvtZ‰D$ D$D$$:$‰jz[^_]Ðǣot&P0 w‰$,8;t_‰;tNvu‰D$ D$D$$$‰jDŽDŽJ0J3J2Ƃz[^_]Ív'UWVQ`M}􋎌9Os `IuO3u qpqtfQFu} ?(tQ8(t "^_]à ^_]Ít&UWVSEeE1XÅ< t< t< t < t< u EƋU`׋9As `@UEPltB u}Bu"UEUXM`B$uҋMEЉD$t$ $D$ t$NjEЉD$E׉$&}UM`RPPU҈PXEMUPY $D$OEx OxMA%_DA} MEuЍUEuEEUvUċrltF t `@$t}B}?}wz|M+ED9A MrXA :JY9}u/t&XȉuĈMuċ9r| :\8JYXBX8f}tȉuE릐9sMFEvM+A BEH mEz)ΉurlE+F MuE̋EЉL$D$ED$BlD$ t$<$D$IMƋ@lP EU;U@ E@Ev?E&9v)8 uu䋏`A9wڍvUuMčLuMċxvEăx\BX:BYuEN 9UĉЉU0f:NX‰ցuu9Eĉu\uʋUtU\Uƍ&IX8u묐t&FE;B|MuBX8BY8\UăM`@Et&mEuu‹+V Q}U;V|^M+Q $PH o P@< u Et& Vl$ED$EFtFx}`@t>t2X;t$PlD$$et&EBl@ AB|UǀǀMuUfEut&} uUhM@Q Mt+PltB t `B$t uBtu uMM}u }t UJ M`RPTuPJ;H z}PLUP@ue35EČ[^_]ÍV 9ruĀ~\t v8\u9s)NMaEUĈBMhFvBlt@ tU`@$EBxȉuEou}D$t$<$8@Uċz|p 9}uĉEċEt& \tw8M}fu^x*Ƌ}čFU}ċ9F|wEf}vltF t `F$tUBtfE렋}p;r|t}\jUu :MnE\EZf3u`At&MЃu<9z|r}9ɉ|M x @ UuM4$L$p`RPPEzP@<  u+V P}x P~ՋU`ы@BPUPXEED$T$Z@EEEЋ}D$t$D$ L$<$+ED$PL$$=UP B D$F $7F }PLiMHLdEE*EЋ}UD$D$ E|$$D$ vUWVSMç|D$U$} ǍlEt cUȅMD$4$L$ E̋xX?tQỦu܋uȃ U*&MЉD$E܉L$$x1tD$4$uʋu܋ŰB %=M̉H<@|[^_]ÍẼH XTD$:D$4$:EUR EуMm؃4U݃<UM܉L$B$ 6MAUM̉ U܋EP XtjB tdH B DtTD$4$ M̉A(vD$4$GD$D$4$)1D$D$D$D$ :D$X4$D$MU9'UWVS|eE1E|x I -][p8){rRB<8D$]4$ 1@$йt/PЀ w"V]t0 w~]t &;<-fb<$<&zv1zv zЉ v_"f9w=);=<-K><\D$$H tЉT$$ t;-MMe3 |[^_]Àz>61f@$&xvx~WvA|HvHv勍+D$ |$$|$)t&@tw\~V򍃣t$$x wdEƅt&=k`V@$uP@lt@ t `@$tFBtF~PD$ D$$D$b0! t€҃+~SD$D$D$ D$$td=B =+fdEƅ fPPЀ <_>$=&2G< v <$OG&BJ0< FPЀ v<,<}"t&{1 t{D$$0FD$$R{[ =AQHЀ (fHЀ vt&D$$>Wf uWuNt$$t=(EƅEƅB< &P0ƀ v(Eƅ v'UWVS\EJMM :=7}E׋EDEB< t< t < t< t< uUEEPЀ M9M 3} P}t&P PЀ <_<'<:M؋RltB t `B$tUB@<=ML$E؉$UqU4ր>y.}t&ƀ>yt$<$*u܋}+E9}c D$ED$U$v9}}uPUu׃ЋM؋`MB$quGM؋RltB t `B$tM؋UBrtuUz|JvJv _U:B:Dt&My:kE΃:UA׈BU9U R } Uu t&9: HЀ vUM 9t.U؋ aƀMME\[^_]ËU<$ <{DUEUU)E9EsUM UE U E:^BEЅNUB< QE9Es6UU< UU9U_< t< tUM M؋`@$u7@lt@ t `@$t EBt U :M PP<_M PPPЀ <_ <^yUPPPЀ <_M MHv}t$M؉ $U< < < t&< fE D$U؉$M L$E؉$k&U؋@l+@ !`@$u䋻;uU؋`@$u4@l{@ q`@$a>Pv!PvPЀ v<_t <:vuD9uv>mt$E؉$J&u;uZ<:t‰+}|$UT$M $[}uUM9M<M< OUt&< 9UwU<[t><{`M :u"Q:uQ:Pu Q:P2D$E؉$~2txD$ E+E D$U T$M؉ $FtPU䍃̼:[tƼU׉D$ M D$D$T$L$L$T$ D$E؉$bU؋P H(P MBU} EMpv'pvpЉ v<_t<:&9rݹD$E؉$+UM M<}U MЉME\[^_]ËMBRM؋`@$*B<EEE\[^_]ËMEMEM1F<3F<L@E EU؃E 8 (D$E؉$m0 u+u D$ t$U T$M؉ $1}#EM D$D$ D$L$L$D$E؉$[EMEM< Ut$E؉$!(t$E؉$%WU؋ &x UE M؋ƀUB<5B< *_!<$<{D$D$4$'U@l@ `@$Myt$E؉$q‰D$$j @< t&x ƀM؋@3EBQU} pvpvpЉ v<_;Urʐ?Ut&9U܉U< @bD$ t$E D$U؉$?. ݹD$M؉ $'9U܉U}UMUWVS\EeU1714q<0QZ0i0 AtqpAx<4ptҿ0<$ (0<~C`B$@QltB t `B$t Bt0?'PQPsQ<_n00Alt@ t<`@$t. tPl R QP|019#s9h901^9~u߀x~u狍, It؋<0@3<ƀ0<`@$uv0AlZ9@ P9`@$@9,<@D$B $D$'9,O <00<,$D$ D$D$]0<DŽ0t)B0P3P2ƀ00DŽu<DŽ"<0t)G0P3P2ƀ00x490@3<pp;Svq9$<0PDf!f5 f#t0t)ҍT$$0P8 \V u8Dž Džv.DžvDž  ;v:($R ))׉0T(9P 10<|$D$ 0L$$dg@9ff0+0D$L$,D$ <$L$~z u z  vD Ql$D$0PlR PpPtPxPl PpQP|ǀǀ060501,@J5,-ƅƅ,f0t&< t< t< t< t;P|01(H @ 9<)ϋ(y GOщ,@9,0w,1 ֍t&T0;0~ +,ƅ0|ƅ,t&tR0D$D$<$< $D$<00< $D$<0.@~(0<|$ $D$D$D$D$ <$0B<@@$t-@ t&%u8:u0:u 1f <Ƀ |$<T$L$ D$<$^F9$0vB9t: 0ƅ,ƅ,ƅƅ,{0#@8B< 0F0< -<=^-<@H@3Pp#00,Qσ=G>~t+< +< +< +< +< +y3B<͑9t  ‘t Fy|Ɔ&W<00x3$V,~<jD$>4$ljjD$ 04$NHzD$ D$|$ $Ly9y0(<$+ ‰<ϋ,<0L`@$u_?T#B<v"B<vB< v_t<'t<:I4;4`@$u0Alt@ uBtf딋<0@ <B3rp40~|VN'@<@]@3PpPp:=:90V<׋0@ d~9 D$A($i0A(<00y3%0Gx;w0A ΋I(F <褚<}<"<'<`t&M&Pv&Pj&PЀ ^&<_V&0Q|#< t< t< t< t&t<  9֐r؋0~30P(@ D<@3,:00W0 y3A=<B3BpPp:=$Pp570A0< Hy3:0JЀ v_t.uaAWv 0+0D$ D$ D$L$4$<0t$<$D$`9Vs `R<B3Bp0<0`9As `@<0x3u‹@4t ;B X~~,~#<`@$u80Al(@ (`@$(~~~FPv*Pv"<_tFD$2$10Ƃ@<D$ D$T$@|,$虵<Ɖ03tr0u-B3<pp'000<0`9Bs `@0<$ȍUfD$D$D$ <$߶G<@@@<`9As `@<@3pp鞴D$ȿ$%Dž,ftrtqD$Ϳ뤋<DŽ|<9D$D$ D$D$<$%0A< w A<PprppF:<>a<0y3i< t6< t2< t.< t*< ft$0Gp< t=< t9< t5< t&t-< t){u<ƀ%<{,^<[$^<00](t }0Pp< t0Bp<@pD$ $)ǍPT$WD$`T$|$ D$o<0x  <-b<{<[0Ƈ<0)0Ƈ<0<@L@3pp#k<@E@3ppPp:=2;)~.F 0F<B3Bpy[1A[4$虠q4D$@l4$D$xID$D$ D$@l4$D$艣 3x I@,0;02D$ D$@l4$D$<,D$D$ L$@l4$D$띋0@3<4oCJDž,$ ƍ<<Pv P3D$ D$D$ $h0a<D$ T$4$D$茽tI(3(+(=A hfT$|$4$0:(GLFD$L$D$ 4$]D$D$4$L$ ,D$4$L$D$ ͽ,@L4$D$@L0,m8:90`@$Alte@ t_`@$uS?|$4$}u 1|$4$@¸tڍ&<_B랋fu 0L$ D$D$4$觧,D$4$T$D$ 艼,=t=t =0,0,<DŽ0t)B0P3P2ƀ00/wpܤx:P8kD$$y01ϋ<pp@D$ $R,t,<@3xpPp:=tPp5 <x3`9Qs `R<@3ppAĝ<B3Bp)顝Pt@6<@3ppS0v/T\Ttu9J|t&S:(D$<$L$u*GPA<D$ |$@l4$D$Plz xtxxBl@ AB|ǀǀƆ&<HQ<;0&Vƀ%<D$ D$T$@|$<蟋<Y<B3Bp%ߚPp5Ϛ<x3H`9Qs `R<@3pp@s "(+F ANDD$4$D$yr<P|9s(< t< t< t< t&t< vԋ<,L<|$ $D$D$,t$ $<|$D$4$އ,D$4$|$Ҫ<Dž40߭0؃4݃<$D$Tx<‰ƋH|9s < t< t< t< t < tv<Dž40߭0؃4݃PP<_>$ (<0AFf=t#,tf=f=ft|0;BxB3(-yB<B<_>$,m(- <|$$<RR $T$l<R@B@@ppc~{.q$d<`9As `@<<T$@@ $D$Xv<0Glt@ t<`@$ttx0AJ<B3Bp#w0FD<B3BpPp:=Pp5v0@R<@3pp$vG @G x @,4$D$ddž$t/D$D$ D$@l4$D$6pfvD$D$ D$@l4$D$oPlz xtxxBl@ AB|ǀǀܘ̘X;PlD$$0閘`D$ D$@l4$D$.D$ ҍD$D$ D$@l4$D$n t/D$D$ D$@l4$D$n!}"<'鈎~:0D$ D$)ЉD$$PvPwqD$ 0D$D$$</<0I| /9r,<_늋'?t\u ƅ('<`@$u7@lt@ t `@$t P P PЀ  <_ <`@$u1@lt@ t `@$t Bt >. Hv>Hv6HЀ v.<_t*;,s< DFҋ<׋009 G<D$ 4$)lj01`P0 xt7J<;G|JsB uԃ1B 8 ΀x uB 뿋< D$4$<H|Pl@| +B A0$0B|D$ 4$)D$腋)D$l<0<0`@BTPJ;H sP T$F $yF <,<$L$P`@$up@lt@ t `@$t$|$Q0@3<0Pv PPЀ Q<.\<-q Pv Pw u}>$tU<`9As<`@<@3ppDP<@3ppDP=t}(D$T$C@8($ty;,s\2<\t[8$tD8(t3ЍPԀ:>z0B3<xp)|LȃurWyB9,w;,sr<\8((yډ<0;p|sX`@$u-0Alt@ t `@$t Bt>w&HvGHv?HЀ v7<_t3xt$<$>]0Vw<x3tU@3<xp)JK9,(\r<0x u@3WPpw0B3<xp)J0Pwt&S0Ƃ<0 {<׋0w9J|ݭD$4$D$?P|)ʍR$iǍD$@||$L$4$)ȉD$ wr|$D$ @l4$D$V<$n@lH PlJ ʉP|I0 zQp-@3<$&<@`9As<`@<@3pp&|HD$4$|$S>P|)ʍR$mgǍD$B||$L$D$ 4$z<^<D$$lϐwlPv P<0<|$$Q<0F(ui<@`@3pp_C01ҋ<4$ <B3Bp&C< 8(t<@3pp4B0_PP<_<'<:,X<@3MD$ D$$<$D$LDž Dž(ƅ0,D{1Ҁ>("<:<{t!,u0<;0<<GLD$D$D$ $?<@LDŽQP0P3P2ƀ/<pp-~==u<P P40t;<(PtD$ D$D$$b <@3pp ;(tx28(tj!7<0@d@3ppPt<f@Fd>(t8(uI70<$t$ #709<$t$ 608<$t$l 606<$t$F 607<$t$ 6<0@@3ppPtf@F>(8(l0<$t$ 5<0@V@3ppPt<f@FV>(U8(><0@^@3pp[5<0@U@3ppPtf@FU>(r8(<0/<$t$c 40-<$t$= 4<0@T@3ppPtf@FT>(8(<0@S@3ppPt<f@FS>(R8(<0@c@3pp30<$t$ x30><$t$R30?<$t$,30@<$t$30<$t$u20"<$t$O20<$t$)2<0@@3ppPtf@F>(8(uf<D$0$t$$w1<0@D$$(n(8(W(v,pp/(c8(L0<$t$y,<0@@3pp"C,<0@@3ppPtf@F>(Z8($0<8PЀ 6<ƀD$ D$D$$Ƌ`@$"<00Pv Pn>MS<@^<0Blt@ t<`@$t(s-8(\0(>8(m<0@@3ppPtf@F>(8(<0@@3ppPt<f@F>(j8(4<0@ @3ppPtf@F >(H8(10<$t$^&<0@f@3ppPtf@Ff>(u8(?0(V8( 0<$ <`9Vs `R<B3Bp"m 0(X8(A<D$0$<t$$G<D$0$<6<t$$<0@-@3ppPtf@F->(S 8(<<0@@3ppPt<f@F>(8(j0<$t$0(8(b<0@@3pp20<$t$S0<<Ƌ`@$u7@lt@ t `@$tPv P <`@$u1@lt@ t `@$t Bt ?HHHЀ <_t닉։< t< t< t< vt< tt|D$|$'t]t2)|$|$ (8(f(8(<0@@3ppPt<f@F>(\8(&<0@y@3ppPtf@Fy>(;8($<0@{@3ppPtf@F{>(8(X0<$t$0<<`9Vs<`R<B3Bp5<0@1@3ppJ<0@0@3pp<0@@3ppPt<f@F>(k%8(T0<$t$<0@!@3ppPtf@F!>(8(b<0@@3ppPt<f@F>(q+8(fX0<$t$0(<$t$_0<$t$90<$t$0<$t$0f<$t$\0<$t$60p<$t${<0@,@3ppPt<f@F,>(8(V<0@@3ppPtf@F>(k%8(T<0@g@3ppPt<f@Fg>(8(<0@j@3ppPtf@Fj>(Q8(0t<$t$B0<$t$0<$t$a(18(f<0<0,<0`RP@3pp<0`RP@3pp<0@(@8((0<$t$U 0<4$<B3Bp <0`RP@3pp <0@@3ppPt<f@F>(58(0<$t$K 0<$t$% <1h(k%8(T<0@W@3pp#q0u<$t$K,0<0@%@3pp<0`RPK<Ɖ030G3<pp0<$t$ t<0@@3ppPtf@F>(8(Uf<`@$u1Glt@ t `@$tPv P0y|)~zvD$D$4$'uFV< tS< tO< tK< tF< tBt;vD$D$4$'uFV< t< t< t < ft< t<}<Nj`@$u7Alt@ t `@$t(k8(5f<0@@3ppPtf@F>(H8(1<0@@3ppPt<f@F>(8(_0)<$t$0(V8( <0@Z@3pp<0@_@3ppl<0@Y@3pp6<0@X@3pp<0@W@3pp<0@d@3pp<0`RP@3ppW<0@3pp.<0@@3ppPtf@F>(E8(t0(8(J<0@*@3ppPt<f@F*>(Y8(B<0@3ppl[0D$(m'8(V0x<$t$<0@e@3ppPt<f@Fe>(8(^<0BU<@3pp0<$t$I<0@$@3ppPtf@F$>(8(f<0@@3ppPt<f@F>(\8(&<0@Z@3pp$D$e<8{<BB3BpH<0@@3ppPtf@F>(_8()<0@(@3ppPt<f@F(>(88(!0<$t$N<0D$ D$ D$D$<$d@@3ppPtf@F>(;8(fh<0@@3ppPtf@F>(ҽ8(0<$t$.<0@&@3ppPtf@F&>(E8(t<0@w@3ppPtf@Fw>($޼8( <B3Bp=<0@@3pp0<$t$v0<$t$P0<$t$*0c<$t$o<0@3pp3F<0@4@3ppPtf@F4>(]8('錽0<$t$N<0@n@3ppPtf@Fn>(к8(09:0z:D$0D$D$ $蛴0D$ 4$L$D$q t(|,t=t& <%L$D$$<֋0<΋0,<00z3rppA>4$$4$D$F0F4FD;FHFDu 4$FD+V F)GWD$D$4$D$4$T$'D$D$ 4$D$SF0;F4~4$4$`|$|$D$ 4$NjF)J|$|$D$ 4$+4$090t@G @@P<W zt&TP fwG @@P-@TJ =DmwQ1E<0X1@ t @ R T(g!8(P<0@U@3pp#m0<$t$G0(B8(Ƶ+0<$t$X<0`RP@3pp0<$t$<0@@3ppPtf@F>(T8(ش=<0@R@3ppZ0Q<$t$40P<$t$<0@\@3ppPt<f@F\>(e8(N<0@[@3ppPtf@F[>(踱8(<0@]@3pp<0@O@3pp0N<$t$=<0@M@3ppPtf@FM>(述8(0.<$t$谾<0@+@3pp<0@,@3ppPt<f@F,>(<8(%<0@@3ppPtf@F>(ձ華8(Y龱<0@L@3pp<0@J@3ppPt<f@FJ>(28(0K<$t$ݼH<0@e@3pp<0@I@3pp<0@G@3ppPt<f@FG>(38(0H<$t$޻I<0@`@3ppPt<f@F`>(Z8($鈯<0@a@3ppPtf@Fa>(88(!<0@b@3pp><0@2@3ppPtf@F2>(U8(鄮<0@@3pp+0<$t${0<$t$U<0@o@3ppPt<f@Fo>(f8(0镭<0@V@3pp#<0@z@3ppPt<f@Fz>( ê8(<0@|@3ppPtf@F|>(\8(&鋬0(g8(1閫0<$t$X0<$t$2<0@k@3ppPtf@Fk>(质8(~0r<$t$襶<0`RP@3pp0;<$t$B0<$t$0<$t$a0<$w<`9Vs<`R<B3Bp襔<0@T@3pp#<0@@3ppPtf@F>(Ѧ8(<0@i@3ppPtf@Fi>(j8(4阨<0@g@3ppPt<f@Fg>(B8(Ƨ+0=<$t$X0:<$t$dz20<<$t$衳 <_ R$_ZD$<$D`)@GEEEXt@D$ FD$F$UD$UEOM$UD$D$UEGEMEyMoEeM[EQEE$UEOUM'$UEOUM $UEOUM$UD$U$D$觽UEOMED$$UD$MUMGEE~,1Ʌt 1;0$UMGUEKFNЋ$UMD$aMUL$ D$F$D$dUD$ F$D$D$6UD$F$D$0UEOMD$ D$F$UD$D$D$D$ D$D$ǷUD$ F$D$D$UEGEL`FNЉEEȋF$UMD$#MUL$ MD$L$MȉL$`$D$ D$D$D$UD$ P$D$D$UFEtsPEEt$MD$:MUEE$UMD$ ED$D$MUD$L$ $D$UL$F$UD$tUEOMD$FD$FD$D$FD$ F$UD$D$UD$F$D$UEOMFEFD$EȋF$UMD$MUL$MD$L$MȉL$FD$ F$D$D$JUD$F$D$UEGED$FD$FЉD$FD$FD$ p$UD$D$UD$F$D$UEGEFFD$ D$FD$FD$F$UD$ D$D$D$詴UD$ F$D$D$UD$F$D$UEOMFFD$ D$FD$FD$F$UD$ D$D$D$UD$ F$D$D$UD$F$D$UEGE$UD$UEOM]EQ$UD$LUD$D$`$D$ UEGED$F$UD$tUEOMD$$UD$UE@GEF$UD$UD$ $D$D$UD$@D$$D$ UEOMTFЉ$UD$NUD$ F$D$D$UD$@D$$D$ qUEGEF$UD$UD$@D$$D$ /UEOM$UD$UD$D$$D$ UEGEqMgF$UD$UD$ D$$D$貹UF$MD${MUD$D$L$$D$ %UD$D$$EUMD$$L$ D$UE@3GED$ D$FЉ$UD$UF$MD$MUD$D$L$$D$ oUD$D$$EQMUD$L$ $D$#UEOMED$ D$$UD$GUD$D$$D$ UEOMEME}Ms$U$U$D$eUEGEHF$UD$BUEOM%FD$$UD$UEGEMD$$UD$UD$D$$D$ &UEGED$FD$ F$UD$D$~UEOMqFЉ$UD$kUD$$D$TU$D$EUD$ F$D$D$7UD$D$$D$ hU$ED$pGUEF$UD$UD$$D$U$D$UD$ D$$D$UD$D$$D$ U$ED$ԮOUM:FЉ$UD$4UD$$D$U$D$UD$ F$D$D$pUD$D$$D$ 1U$ED$9GUEF$UD$UD$$D$U$D$sUD$ D$$D$dUD$D$$D$ U$ED$蝭OUM$UD$.UD$D$$D$ ?UEGEFD$$UD$UEOMXt@D$FD$ FD$FЉ$UD$1UEGET$UD$UEOM0F$UD$UEGE $UD$UEOMF$UD$UEGEFD$$UD$:UEOMD$F$UD$UEGEtD$ FD$FЉ$UD$UEOMBFD$D$ FЉ$UD$UEGEF`f$UD$D$UEOM$UD$UD$@D$$D$ UEGED$F$UD$UEOMpD$$UD$UEGEFF$UD$@UD$ $D$D$UD$@D$$D$ dUEOM$UD$UD$@D$$D$ #UEGE~$%L$ UD$D$AUEOMk>$U%D$D$AtUEGE7D$D$ F$UD$UEOMD$D$ F$UD$RUEGED$$UD$UEOMEEMEEuMkEa$UU$D$SUEOM6$UD$UEGED$F$UD$UEOMfǀ$UD$'UEGENM$UD$D$PUD$EX$D$OUMf$UD$D$UD$EX$D$GUEXt@D$FD$FD$ FЉD$F$UD$~UEOMXt@D$FD$FD$ FЉD$F$D$!$UD$UD$$D$YUEGE\$UD$UD$F$D$!UD$FЉ$D${UEOMFF$UMD$$MUL$D$ FЉ$D$D$迩UD$F$D$ UEGEFF$UMD$MUL$D$ FЉ$D$D$MUD$F$D$UEOM*F$UD$$UD$2$D$ UD$D$2$D$ NUEGE$UD$UD$D$a$D$ UEOM$UD$UD$D$`$D$ UEGEOME$UD$@UD$D$^$D$ UEGED$ FD$F$UD$QUEOMD$F$UD$D$ D$UEGED$F$UD$D$ D$说UEOMbD$F$UD$D$ D$vUEGE)$UD$$UF$MD$ MUL$ D$F$D$ЭUEOM$UD$UF$MD$MUD$L$D$ F$D$BUEGEu$UD$pUF$MD$YMUD$L$D$ F$D$UEOM$UD$UF$MD$MUD$L$D$ F$D$UEGE$UD$UF$MD$MUD$L$D$ F$D$(UEOM[$UD$VUF$MD$?MUD$L$D$ F$D$UEGE$UD$UF$MD$MUD$L$D$ F$D$lUEOMNMȍN~=tFN$UMD$MU$UMD$jMUD$MD$D$ $D$UEGE$$UD$UF$MD$MUD$L$D$ F$D$UEGED$FD$ F$UD$@D$KUEOMD$ F$UD$D$hUEGE[FD$ F$UD$D$6UEOM)F$UD$#UD$$D$ UD$@D$$D$ MUEGEFЉ$UD$UD$$D$UD$ F$D$D$UD$@D$$D$ ּUEOMYF$UD$SUD$$D$F$UD$D$ D$舷UFD$ FЉ$MD$D$MUD$L$ $D$dUD$@D$$D$ UEOMF$UD$D$ D$UD$ F$MD$D$}MUD$L$ $D$UD$@D$$D$ pUEGE$UD$D$ D$^UF$MD$MUD$L$ $D$IUD$@D$$D$ UEOMFЉ$UD$D$ D$׵UEȋNF$MD$\MUD$L$ $D$NMȋUD$L$ $D$UD$@D$$D$ AUEGEFND$F$UMD$1MUD$L$ $D$ÿUD$@D$ F$D$ճUEGExFD$F$UMD$ƘMUD$L$ $D$XUD$@D$ F$D$jUEOM D$ F$UD$D$yUEGENMD$F$UD$D$ D$UEGED$FD$D$ F$UD$警UEOM`D$F$UD$D$ D$tUEGE'Xt@FD$FD$FЉD$ FD$F$UD$UEOMXfH<XHGEF$UD$UEOME@3GEmMcEWEMEAM7E+E$UD$D$UD$EX$D$pGUEFEM$UD$L$U$D$GUE;ww%Ft+9qqiF9G$~ӉMD$<$薠M뿋tϋF ;\tt1xt(\@ GbM<$D$MLJ\1ӋG1G$UD$ "D$D$1UE#Eǀ$UD$UD$D$$D$ UD$D$ F$D$躰U\sD$EU$UMssD$ $UosD$E$UxD$$OMGEUWVu,`;0@ LM ft*9Et%@ u8uG8t&90}‹0dž,dP^_]Í^_]Ít&'UEǀ<]Í&'UWVE P RH r P~V}Ɓ}t&t-t9Et@ 8&u}x4uؐt&^_]ÐUSEU D$ T$`$T$膴1Q@@u@[]Ív'UWVS2t9utEЉD$F $UʶUuF uM 9s;HwvuUP4MɉMut$ML$uD$t$ @8$D$UЋEEMyUP$iM̋űU`Mȋ\M̉uЋB `B @\@ Au1B@@,1Ɂ@@ %@=@t$ L$D$D$B D$Ẻ$hŰMNj`@ 4BF%@=@tQUx<zMċŰBL1҅t @M̋QLT$ |$Ű\$D$ŘM1u@E̋Uȉ`MЉ\1tuЋF ỦBl[^_]Ð1l[^_]Ít&l[^_]Ð}MuU@UtM@%@=@EB$ J<΁0EuJ<΁@M1ML$ML$MD$L$ B8D$B4$UЋETE0fuUuQ @GzU)@ @T$ MD$ D$D$ D$D$ D$D$4$|M E+MU4$L$ML$EUEBB<qfvGhUD$ D$D$D$D$D$ T$D$4${@EEMMA wPUЋA u`9G(UtM4$L$7C}!}U!‰UUe3EBĬ[^_]Ðt&UEB DUE;Es9G(uD$4$M~hGO)ʉL$MD$T$A D$4$D$ , D$k`)fEx+9G(D$4$+ME̍ẼD$ EЉMЉMD$T$ xM;MtMa=wW`G`U։T$UD$ D$4$5YUD$ 4$T$)ЉD$}EEEM@E!@t#$EO`{UB M@EЋQ E1;UEMEM̉MMȉMMMMăuƉ}׉M'EEU9P(U}9}IEP`tϋUM|$T$ $%HM‹@EMT$D$ EL$$hnEȅtE}/v$UEt$UEƋE9s()…҉UtNjMU|$ $T$GMąu}B&+M4$L$ML$|E9G(tG4$D$L%D$~WGщT$U)D$L$B 4$D$ ` D$l D$7&B f@9G(tG4$D$L%D$}WG)L$MT$D$A 4$D$ ` D$ D$E4$D$>t&EЉD$ED$ 4$D$f}Unf$EUt$Et&ỦT$D$4$!FMG`vu}EЋM9O(JUEЃG(o}UE4$D$>t&D$ 4$;} r}܉>BX09u wu܉09J<ыuЋE;E vM v9rU׋M Q1fAE؉UEm؃4݃V9NRF0FF4MF@ N@E F<F8@VB tu$f@F ,[^_]ÐF@tEЋMԁ9H($UЋEԉM5MEȋEЋP;U";E #E;H(uȅ"uЋFlD$ D$D$D$D$D$ uȉD$t$Eԉ$M>M@EsűF@Eȋũ}V KEЋp<192tY}ċ} ;49}ċűpuu9p upuЋFt NjM̉L$u$t$UЋES$%UЋE蝣Ủ4$T$D$UЋEUЋMB;B UЋE襸8)}uMЉq< v}>^ỦT$u $t$UЋE芚}t|Eԋ}9G(tl}Ut[u<8@t$Uԉ$]?t3F<u׋ẺD$UF$T$UЋE뾍E~MЋAQ9 8)~}Љ֋UԋG¨)9W(tGD$L%D$Eԉ$[AG~ uD$DT$t$ D$HD$Uԉ$8v`flj)ủ}ĉUfuȋMЉqP)u&F)u9MfM̉t$L$E$UЋE̘&EE9B(t RH(Ẻt$$D$UЋEԈMUЋEEM;B(BHEvE Ed&u})u̍iEЁH4Q}ȅ‰׍&1t$$UЋEE'EԋM9A(tT@A+EȉD$UȉT$Mԉ $=ƍ$E(}GMЋQ R tUЁJ4}Ru̍ O:EȅǸO5}u̍UȅǸM}t"}u̍Mȅ$JUЋEBEUЋEtEČ[^_]Ã}u̍muȅǸPh}Ou̍}7EЋ}ȋpD‰( EԋU9B(tBD$L%D$Mԉ $=uЋVF)T$D$L$}D$ |$` D$ D$Eԉ$訷uąt"}u̍zxMȅ}ǸNnEԋU9B(tBD$L%D$Mԉ $E,MЃI4ẼAu1ɃFLEE%F1<E̋}ЃGUԁ¨9W(tGD$L%D$Eԉ$:GMЋQD$)щT$L$ D$ D$uԉ4$S2NEŰEЃ=Mԁ9H($UЋEԉMcUЋMƋB9E8)U1;J(t+$EMЅQ R ttFuкCF0@t҃ED$$UЋE+EUЋEگ\EEй@LH4UЋB+&{_}fPƅɉWNV\ùxp?Ѐ~{}ЋGẺGEsE̋UЃBUԋMЁ¨9Q(t"AD$L%D$uԉ4$8}ЋGMЋQD$)щT$L$ UЍuMR<M̉UL$D$u4$UЋE7U҉EЋU@<9ЉE}UMЋEA<1EEE:~)$BUЋEEUЋE@FE̋UЃBu1ƨu9r($UЋEԈMѯUMƋB9E:UЃBM1;J(t+$EkMЅQ R ttFD$$FUЋE谗EEUЋE[8)*uD$$5UЋErt$D$U$UЋEIMt$D$M $UЋE5E4 D$$7UЋEt$D$Eȉ$UЋEUЋE谬Et<|Ed<)$%UЋE;t$D$NjEȉ$UЋE萎M̅} t$|$Ủ$UЋElt$|$Ẽ$UЋEPuЃF8F<)t)U t&r<)uUЋEثEMEЃ@L~)$J‹EdEEԋ}9G(t"GD$L%D$Eԉ$L5WŰMЋŰűAt$)‰D$` T$}D$ D$|$ Eԉ$Z D$Uԉ$,t&'$UЋEԉM踕MEw$%ދ}$.|$UЋEԉMUЋMEE9B(8B4 .BXut9zDBD$UЋEԉM0}ЋMEE9G(EG\vƍPvwPt&MЋE܋U !Љ}:EԉEb uЋF;M uЋFh UЋBWuЋE9F(UЋB=uЋE;F(uD$Uԉ$Mp0Mr uЋF @uЋFMЋU܋ E!ЉUЋE1EEE:;M UЋMȋBEM̉L$ED$F$UЋEt&Ep<‹@9J(Bt"BD$L%D$Mԉ $Z2uЋF}ЉWD$ )щT$L$ D$ D$Eԉ$)v:) }ԋEЁǨ9x(Z+ủt$ỦT$Mԉ $/uԉẺ4$+4$!E܉D$D$ ED$Ẻ4$D$HEH@E@ 4$MZ$EhUЋMƋB @ LB U@ T MЋU܋A @ TẺD$Uԉ$UЋEL}$;UЋEEE;x(tUt$$9UЋEIUT$D$M $UЋEl<D$ EЃu< D$` D$L$T$t$ D$}ԉ<$躡Eԋu9F(tFD$L%D$}ԉ<$:'UЋBRD$)T$ L$ Z<)OUЋMЋBrU)Ɓ¨9Q(t"AD$L%D$}ԉ<$&UЋB~ uD$D$HT$t$ D$Mԉ $?E̋UЃBUԋMЁ¨9Q(t"AD$L%D$}ԉ<$V&UЋBMЋQD$)t$D$ )щT$L$u;N(tFD$L%D$}ԉ<$&FMЋQD$` )щT$L$uD$ D$t$ }ԉ<$E̋}ЃGUԁ¨9W(ZGD$L%D$Eԉ$%G6֋R;N(VtD$L%D$}ԉ<$]%VMЋAщT$)D$ L$ }UU UU~N~ED$$HUЋEQEEЃ@E1EEE:EVF)Ѓ~ uD$ @D$HL$T$D$}ԉ<$uЋUԋFv¨)9W(tGD$L%D$Eԉ$4$G~ uD$T$t$ EԋM9A(tAD$L%D$uԉ4$#}ЋWG)D$T$L$ |uЋ}~E9F(t"FD$L%D$Eԉ$#VUMЋUuAt$)‰D$,T$ aEԋU9B(tBD$L%D$Mԉ $+#uЋVF)D$T$L$ MЋủqE9A(t%AD$L%D$}ԉ<$"EЋ@E̋UЋM̋BỦL$D$)‰T$ KEԋ}9G(tGD$L%D$Eԉ$q"UЋBRD$)T$L$ủt$}ĉ|$ E̋UЃ;J(BBD$L%D$Mԉ $"}ЋGp D$Uԉ$};O(tGD$L%D$Eԉ$!WMЋA)ƒ}>uE< D$` L$T$uD$P D$t$ }ԉ<$כUԋ}Ё¨9W(tGD$L%D$Eԉ$V!GMЋQD$c)щT$L$ vD$Eԉ$MLMEЋp@t$P)D$T$UT$ uD$t$Eԉ$MaUЋMB&UWVS"b EċE RHM։UME<)<(<$fuP@=w W`S uEMf}yWW&9vI< Y< Q< I< A< 9<#u < t9wO4G`t E@9wvPրEĉM虎EM$D$EĉL$M Ew;w6t&EĉFG8tGLU $-GLE P$t&EĉxEEWwߍt&UBփP @EuEH@t+Uz `_ } }ΐt&EMQ, vuEx{C D$}4$MЍE؍E܉D$ EUED$D$EĉL$$ U=EvG`rUā}< E}0t3MA0< ED$ D$ $;G<$E܋UD$ MċEEED$D$T$ $uu؉E[uE  uE uE uEuE 9UG֋U);W(tGMĉD$L%D$ $G~ uD$D$HD$EĉT$t$ $Z M}t}{ઍP}G9y8qM1;O(t&$蔞‹G @ ttFCG0@tET$$EĉpEEqE$EĉqEGLEEĉ<%$EĉpEEɋG9HƋWE)9G(tGD$L%D$Eĉ$W~ uT$UĉD$D$Ht$ D$$GL$Eĉ;pEE&Eĉ$ pEO4E$Eĉ$oEO4EGLO4% $t$V$T%$$GLO4% $$5Eĉ$BoEE-%$7$U+%$$S~{OLF9GsOwEM$EלMEOoMwE$>EE?GLE$RjnEO4EQ$WfvqdM`@:}EэU؉uΉEU/M$EĉL$U؋M9s2)хɉMt)EUMEUĉL$D$$M؅ɉEuuu#W8U<,k}<}Z-MOUD$ D$ $SUE:,W$UD$ D$&UEE:0tEwEĉCE W,DG,EM$(D$EĉL$gUā¨UEE$$vW)W`<'<Ή2F<<WD$$XUME$&T$L$諓EG,UE¨U EM$7D$EĉL$jUME$$T$L$KEf@MEĉˀEU$:D$EĉT$ EMD$EL$$EbG;G5EĉmEĉ$kUMT$ $D$EqbEU$4D$EĉT$肒ME$%jUMT$ $D$E b`MEUEĉ $FM؅ɉEG`M6GGH/EEJ>߉1Ҹ@EUE܋Mĉt$EED$T$ D$ $u܉E`>뎁}E9G(tGD$L%D$Eĉ$WGD$ щT$U)D$` D$L$D$$Ԃ~f~ EW)щL$MT$UĉD$D$$D$ ED$M{E9G(LUD$$ 1GMt$D$)‰D$ET$UĉL$ D$$1<,2u1ҍv6U:v`M9ߍt&UEUUD$ D$$tG<)Ѕw0< $uփGQЀ vu9}t}:GE9G(t G;P/G0@t1$EĉT$fEoEn|EE;G(t UEwEĉM9|M}QM!EUD$Eĉ$؁밋UzJ&#TD$}4$MGM GD$ D$4$L ~ ;G<EbE9G(tGUĉD$L%D$$.WG)D$T$L$ wEĉM{1ҋMEUĉD$L%D$$WG)D$ T$L$ nEGU9W(tGMĉD$L%D$ $GWD$)щT$L$ D$ D$Eĉ$E9G(tGMĉD$L%D$ $$WG)D$T$L$ 렋E9G(tGD$L%D$Eĉ$WG)D$4T$L$ |E9G(tGMĉD$L%D$ $WG)D$T$L$ Uā¨9W(tGUĉD$L%D$$HGWD$)щT$L$ M;O(tGD$L%D$Eĉ$WG)D$T$L$ E9G(tGMĉD$L%D$ $wGt$)‰D$fT$ 2wE9G(tGD$L%D$Eĉ$lwGt$)‰D$ZT$ U;W(tGMĉD$L%D$ $'GWD$E)щT$UĉD$ ` D$ L$D$$?|GUā¨9W(tGMĉD$L%D$ $GWD$E)щT$UĉD$ ` D$L$D$${EwOE9G(tGUĉD$L%D$$JwGMĉt$)‰D$ET$ $D$ ` D$D$a{UWVփPM EEEu5ǁǨ9z(t RH"E$aE;~(EEnvE1ɍUEUԃE.U܃F,EL$T$MЉ<$XMЃEϋF;Fs`<|tY<)tUE܋UԃeD$E$jtTE؅t%EUEă uUă ‹EfM֍vtV}u EU E؃P^_]ÐEnEFHD$$8_EE$$e`M؅uE덉'UWVSù@ D$ UE$D$,xE$VEE<҃i}"U}#E-$ĚD$<$T.E@(UP8MUTA @ TD$$MAUz`u0D$D$4$D|@ uD$D$4$}9} M lu9u :} EE}}EU@EEGz$N uEt/MQEɉMуeMUEEEE9ƉEXE܉Et&E M؅EUMD$ ED$ $L$D$U)UUEE=E UMED$T$D$D$0D$ L$$?H)I fEEu9u]UR`EEGf8W$fW$fUtE܋MOAfQE@`bUD$$H E܉4D$ MD$EL$$4+MHJD T$xMT$ $}MܺȃGMt#E܋MЉGMQ`E܍P?GHEEu9uEu 9u U9W,m W,uEt$$V9EE}uUD$$+MAA$|fEB  PEǃ9 4$D$UB D$$F MA @ fA @ @u9u } DžhEfDžt|EDž`||ppBEy$ 9‰UE uܿEEuEp`M}U؅UEMuD$ T$D$ L$4$U)UUEE=nuEUD$D$D$ D$ t$D$$@@ &pf%E}x Gf921t89}H9rX P1҉EUm݃$U}z L$G$GM}A D8f4ЋUMuB Dt}G DfEuEEME9MGU}UpG }4<$L$+NjEPt tM ft;}s@UBt+lfHh`fUB ifp2futf2|}t$<$9E|UEP4MD$A $uF }D$<$7F}P}EEEUUW BpUfu~>}} փ9f9wf9UsfU9~}֋MtU|+t;UMO$Upʋt)f9uUu8At& w$I)wE ƋOutG MD1t09}|+tUu$mUW EBUE9U0EEfEUD$ t$D$E$D$ MU؉T$ UщT$4 $E܉D$M؋4MEu==*={=Ev уMM+M=Mعv уfʋE܉U|vHG$fG$D$UD$$6MA`ED$$H E܉4D$ MD$EL$$4+MHJD T$xMT$ $(?&E/&ED$EED$E$\D$&MMع ȃED$EED$E$D$?=UGHE}MMعZ}@ 80gt&UEE܋MQ4BfE܋uD$lD$4$EREMuD$ ED$ L$t$uщ$U؉T$ Ut$$E܉D$U؃Eve==}==v у)=Uغv ҃v֋E܉uvUغMD$D$ $HD$$ GUMB DfB D@B DUغrED$ $E>EUD$ t$D$ED$ $~EEMD$ uED$ L$t$$NED$E4$Q4@MMع UغM9O0O0G,v}tUG f 1MMعUغVEG,G0,EE4eED$G$GMEMm݃$p‰$D$D$νG UDu9uuW|U:U|d\4M9Fteƃ;UUr䋅d\@ M|΋GUTG MuUDUruMEMhd\p+tUMU@ GUT0G MUuDUh)ED$$MAUD$B$ǃ$辸MA4$D$訸uN$F E9E ~} uU uuM܍}DžhUfDžpDž`|tEU\\BEy$9ljEEEEEE &EqM؅2MUED$ L$MT$D$ $U)UUEE=|UMD$D$D$ D$ D$T$ $@ _@fttHMFu!UEF@F$‰UFȃE}9}3UUR`EE܋VBfuE܋MD$lD$ $MUED$ L$$D$ |$wtUL$ MT$E܉D$ $U؃Evc===f=v у)=Uغv ҃UE܉USUغD$ED$$Uغ뼍BN$1\EF U<ЋEL$$EVt pEUfp9Uv>F"U+lpfHh`fF fvx:fupf M}L$<$9EEEH$E1҃UptB4tȋMEEEUEApu@A$}uEE|yU4tc}m}uQ |E+ED2EyEUEtq$1u7A}|0EuEA$E;E }fyu7bEE1뤋EUMD$ D$T$ |$ $CEUغ7U9UvHuUu<t<4u7uu}utu9UUwUQ |+EED:Uy1҅tq$1Pu7A}|0EE9EsEp9EtmA$EF p}flUغT1EMhED$$FEUBtD$B $zMA AuD$F$\FEU9U [E+E u fF}G(}"My^A0h@t{E+llfFT~EPt`)fMQ(A f<uyth+l'lF=[lM}TA @ | xUD$$My8[^_]ËED$$苰F E+llfGUB0EUD$$P`*ED$$/MA x|E|$$`?|ED$L$$x1}r,1MbD$$ 謯MAMqE Ulzy(lF>uAUB$WMA0Mhl}EE}uuF49EEF PUf8EF$E1 9} :9r);Ns~|;}u؃E}xMT$4D$ D$ $4@ @ E}4}%EȃF}t&M} ȃFF$U }xEMD$ T$D$ $gB t[RU؋@ }thllU؈U؍J҉MtU M؃yɉ}uUEM}ED$ T$|$$[lQ1}}넋~1E tEtfmMEtfEt}MxE4D$ L$|$$R4@ @ 8ɉMNM}}} ȃFEȃF}}llBfAuF,~()F,F0)F05Ll4}ȃFF$M4D$ "D$D$ $4uF0D$E4D$ "D$$4EMycNDžhDž`$W|?1xD$$MA4D$A $&uF D$$|FDžhEDž`E(E܋UD$8D$$vEt&UWVS ,}?$שtoD$<$UD$ $st+uƇ,[^_]Í&E䉄EӐƇ,[^_] UWVSMEU u}E eU1҉  E$DžMtw@BDž<-!u(u4<-u0x-uD$4$buꉅU w,DžDžDžDžDžDžDžDžt&t 9JwxZruJ J Mxt<!++4ɀ #JrDžv7uSPtL;}B֋D$$t*Hр<$uPt;|Ðt&EP #pE@<8<<5E$qE$vNe$U DžDž$,D$4$D$sGLPQPQP Q PQPQPQPQP Q P$Q$@(A(Ue$GLUPUPUP UPUPUPUPUP UP$UP(M$GLa2u$JыA`XtE$cGL1B(WL r\f<\DB9zDžẅ́wƅ{ &tj9vMD$t$ |$L$$P Puxu9wU JPxuԋr`t&u2t Dž1E$t G@$G@E$E$@tO@@;}e3=ļ[^_]Ën+GdttG@ G@E$uGLbE$t=fwLҸDGL GL{e$ UR QFp FT FXD$A<$UD$D$${D$L$4$0"l E$~Ue$ jGL@(WL1 rGL aT$D$w $ïyH nEE D$D$$ȉB 0<  8 -.` 9d I_f8;P  =!  wL  ЋЃL1r7,D Ћ 81A(WL rWLD2GL GLu~#GLEwLt:w*ЃDwLwL~M,B(WL1 rWLD GL GL D$t$$贩t$D$$$4E$tfGL E$ 1vPv( _ =T Pwߍ&=uE$e$E$ <$D$T$HGOUIJU D$T$$jD$T$$ԅP<$D$T$3H1E$ E$ e$%f: t% E$1ɋ+|W+G9D$t$<$FWB t 4L$T$D$ $ߚW N`ɋ}@)¸Wu5w@`kP)ЉGwL$${ ttO@z+2v@ffFt$<$gP<$tӋuW G9Ɖ WB  puJ +W@`t&T$L$$)ʋ)։ux`T$t$% D$ $9 | AUp9p ; A T$ t$D$ЉD$$跮BBGU)PL$D$ G$D$WB tStLT$D$w4$t&p x@` @+uB EG 0 |Dž julze$E$ Z<$D$T$Bw| *ƅ 1U(M$@w;U{f4U G<WfU2E$  ODODFBx$ V ʈdx!tE$Dž 5T$ $趲u$1ɋU$E ƅDžDžDžDžЃW‰W%1t&Pv ~$=uwLL=uu>u E$$qΉ<Dž|DždGDhGHl1E$(t%f82uuA?EpE$ t D$4$+EUEE(T$L$t$ D$ D$$D$ED$D$E$‹E8tut,d%tO@hGDtE$WL'>UR@9EO9WHAU 9EDžDžGLU$,ҤD$D$$RGLPQPQP Q PQPQPQPQP Q P$Q$@(A(Ue$GLUPUPUĉP UȉPỦPUЉPUԉPU؉P U܉P$UP(M$GLQwL L=X!GL@[u򈍌D1,t&~ vt#~=t= uӉwLLE$tO1Pv ~1=u*扵wL L=u1Pv ~%=uPw=uWfwLL=u)E$tl1Pv ~$=uPw=uwL L=u1Pv ~$=uwLL=urE$ GL`(1=NPЃ wwL L=u E$tJGL`(1PЃ v*扵wL L=uWL1tJ(M$=PЃ wwLL=u[GLH( M$FE$GL$`(1t& t t܃ t׃ t&t΃ tىɾ拍wL T뚋GLGLH(M$E$GLs`(M$jE$GLH`(1% t t܃ t׃ t҃ t݉ɾ拍wL T랋GLuY1-fwLL= tЃ t˃ tƃ t uٍt&붋GLGLH(M$iE$ttGLK`(1>扵wL L= tà t t t u؍릋GL91v t t܃ t׃ t҃ t݉ɾ拍wLT1PЃ vwLL=u/E$GL`(M$ E$tpGL`(1:f扵wL L=PvPvPЃ v_uՍv릋GLuT1Pv2Pv*PЃ v"_twLL=u8GLGLH(M$&E$GL`(M$E$thGL`(1Pv?Pv7PЃ v/_t*扵wL L=uGLt-H(M$pGLH(GLM$U1.vwLL=Pv͍PvōPЃ v_uE$&t{GL`M$dM$t?WLB u 2(t E$GL` yWL4$)M$T L$4$t9vx,uUEMDž$D$u$A P E@D t$<$D$T$)E$tUm) QDžDžA8U(|1ɉE$΃DžDžDž1E$ t JQDžf1ftx6D$Et$ UD$ED$EL$T$ $L$T$‰tF< A,9~E Q09}=uDžDždf9~e$O@tO@hGDU$tU $% ;P8EDždGDhGHlM$(&pHE$%0t$4$UBlbu$t3G)ȉGu 9t GE$E$t GLUE8UE%@Ǩ84E@084^0Dž$ 4DžD$DžDžDžDž DžDž<Dž(Dž,Dž0Dž@DžDDžHD$$KDžMe3 Č[^_]Ë H~t Љ DžUD$\$Q}< $`,<,GGG G2':Dž:t?ʉ (H$@< ;l#48ut$$8uV-\Dž-DžD@pHDžt&'u,Dž@닍&Džx_҉Lf~@$#H<f ҉T$$X' V< " <  <r Dt&FЀ<W<D ЃO GEuV]A<':$8T$ $|x@FD8 V$qt3|$ t$T$$<]u}]ÍvUVS0z toT$$'s@ tmRU@ D$D$D$D$ T$ 4$D$bet@ tJ@0[^]Í01[^]Í&UT$D$ "D$4$IxU{t&4$D$D$[0[^]Ðt&UWVS\5y2 U4EẺEĉEft$<$r@ ZRU@ EԉT$ UD$D$D$T$<$D$IdF%=u=ŰD$<$qD$D$$D$ED$ EԉD$<$D$cVuЉ==}-v4D$<$qD$D$$D$ED$ EԉD$<$D$Mc}&\[^_]ÍUT$D$ "D$<$IvUEf *t)t4fJUЅ t*fF EЅt U &=tِ=t&f뾍=v=t&0!4D$<$oD$D$$D$ED$ EԉD$<$D$aV(v=t=t&:UȋD$<$@oD$D$$D$ED$ EԉD$<$D$aVDV :V$0D$ <$7n&'Uu t&t fBt&t(&UWVSEU PuM uE"EEUUEeE1E Uf%f҃7%E UuUE UE%123E4567EEE89ABECDFEE @EEEEEUE E9EE#u|#U#x*1EE1Ev}fE vE u*M9M9J^vv}t 89MrbUĉT$UD$ tD$T$U$?tE u u9uv;}G}v:f}vtE+u0UB Ue3Ĭ[^_]Ðt& ga"5f &9u&vM 0 1D$ED$|t&UED$t$$:=}E tWD$EtD$ D$D$ED$ $gt{$at&D$ED$ED$EĈtD$ D$D$ $@gtf҃T$ UD$E$D$V=7t& &EvvEUt$D$$~1EUD$ED$ $D$P&%t \8M9FEEŸ=t&  Et!EnEr}"E"t&EfuBD$ED$xb &'UWVSL}$pà U"@<",tftT$U T$E$H@D$ED$ED$UT$ ED$E D$U$EU tE D$U T$E$H".tE;EwU B L[^_]Í&D$D$ D$U T$E$;U B L[^_]ÍD$ D$E D$E$UmNU<"D$$D$ Rt&D$ǠD$ D$E D$U$;&D$D$ D$E D$E$U:UUD$$D$ U8E]vns uuD$E}} D$D$D$ED$t$ |$$;;us E<0tG ]u}]Ð#D$ED$D$ |$$:č'UWVSmɭ \}u <$JPED$ EĉD$U<$T$LpUUUUSNUGEЍUԍE̍#Uȍ#EEU}䍴&9u9uF9uE;V҉U{U䋂DtsB0x(R,94:9y1҃}ҍuEĉD$E؉D$ $D$UT$M $7ND$UT$M $E}U܋P v  UUUUt NUE܋}#T$U<$T$EDEuԋU܍Bt1}}u܉Ɛt&E܃|$D$U${Du}䀿+tMAUB IB \[^_]Í?+D$ML$}<$ DENt&} t D$U<$T$MCMF@~ 5D$Uĉ<$T$LgE䍃?+D$M<$L$CF D$P T$@D$ F D$M<$L$PD$ _D$E<$D$5F  E<$D$*E܉uԃS $D$ML$}<$BF% = MȉL$}|$E$BN}9i $D$Ðt&$D$UT$M $pB}䋇uЩfuzr d81[JDE܋ŨUWt&D$ D$M<$L$g\[^_]ÐED$UT$M $A}ЋG% =E܋UЋ}Ut&ML$}|$E${AU䋂 ЩfHtc]E܉׃tU܋}PUыR @D$L$<$@E܉uԃ2E܋}%T$M<$L$E@EEL$<$caAO$D$E<$D$@#r%D$ML$nUċ@(tPT$ $$D$ED$<$2E܉uԃw@D$\$ D$M<$L$2E܉uԃ;EEE܋}uԃ tl_t`$9o`@$l<$SD$D$\$ U<$T$2<$UE܉uԃ@D$ I$D$UT$D$k@t$D$ U<$T$bD$ 7$D$M<$L$1@D$D$D$ F D$E<$D$KD$ 2$D$U<$T$31+$D$ED$o@D$ D fD$ML$EfUWVSLufec t`D$4$T$?U Bf%f=iD$D$4$VIM A%v&4$*\vT$$'L1[^_]f3t&Dnѐt&hωMIGE܉E܉EƒUf]U܉T}ԉUt&MyYE x 4$g[a$T$|$$&E PF D$4$(LM D$D$ QNjF|$4$D$]G lG E4$ZUT$^T$$I&|$4$#t&} GFD$4$5lj4$Z^|$T$$%CU:@%t MAD$ D$@04$D$E} D$ W T$4$D$E@ tBx NfGX냍T$4$&W&D$ "D$D$4$ at&D$ "D$|$4$`Ev`$9W F4$6YZ$T$$$vt&UWVSaù vD$$j@G rD$4$TCtg$D$D$4$>gt&U]_Ɵ uuD$ EE 4$D$v$D$T"E4$D$ED$T]u]ÍUES4EED$EK_H D$ ED$E D$E$C4[]Ít&'U8]E_ uu}}D$t$z$D$ E |$D$E$ty$D$<${!t1@ t+@ I DtD$$D$<$D!B<$D$$D$&!]u}]Ðt&D$ <$$܍U8]E&^# uu}}D$t$z$D$ E |$D$E$t1@<$D$$D$ ]u}]ÍD$ <$$ۍ&'U8]E]à uu}}D$t$z$D$ E |$D$E$qtAF t;P F Dt+D$$D$<$]u}]Ðt&D$ <$l#܍&'UWVS\ٜ uuft&bt&t& t& @t&;t&Vt&qt&t&%W#t& t&@t&Z tLtFF%=o(D$D$U$tF@t")D$T$M $>F t F L ׋R H| ,BD$D$U$)y D$ ED$U T$M $|$ lD$)D$E$  tqthF#@D$*D$ UT$M L$E$_F ID$ M $I TJ V  )Pt?M$L$D$}|$ET$ D$UT$M L$}<$K&@t'D$*D$ ED$U T$M $[  4f[(D$L$E$pp&FDvU_k`$9G}`@$DE$e'L*\$D$ D$UT$M L$}<$R<$*)V4|$ )D$|$E$T$M $$[^_]Ðt&(4&(D$T$M $]t&(D$L$E$5Jt&(D$D$U$ t&(D$T$M $t&t(D$L$E$z(D$T$M $ (D$D$U$g@(D$L$E$<(D$T$M $(D$D$U$t(D$L$E$Y(D$T$M $%:(D$T$M $^F%=(D$D$U$,v(D$L$E$t&(D$D$U$t&(D$T$M $t&(D$L$E$Qt&HW @hFF D$g*D$ ED$U T$M $F }$|$P T$@D$ F D$D$U$&D$D$M $F OvD$M $@D$*D$ }|$E D$U$@ |$D$*D$ M L$}<$ QD$U$[^_]ÀVIV%=@r&F@@@@u$)D$|$E$ fF@@)D$T$M $V FfF *@Q4p)D$T$M $ VщЁs@y)D$|$E$ )t&@< @Y ~fH@<|<)D$|$E$ M@L*\$D$D$ ED$U T$M $F t3F D$@D$+D$ UT$M L$}<$@D$,D$ ED$U T$M $ @=GP t:EHD$@ D$,D$ }|$E D$U$d@$D$.,D$ ML$} |$E$8P$8@(D$},D$ }|$E D$U$@,|$D$A.D$ M L$}<$ @D$?/D$ ML$} |$E$@PP^D$`/D$ }|$E D$U$:@QD$R.D$ UT$M L$}<$ tt&% >5fF%@=@PC*T$D$ }|$E D$U$fT)D$D$U$FI)D$T$M $Fh)D$T$M $t&(D$T$M $@<%(D$|$E$u@<)D$T$M $Et& )D$|$E$@<)D$T$M $@<}(D$|$E$@,D$ ED$U T$M $@ D$N,D$ ED$U T$M $E$D$D$UT$E|$ D$ML$E D$}<$X{D$@0D$ MD$L$}<$EED$o/D$ ML$} |$E$FD$.D$ UT$M L$}<$E$D$D$UT$ED$@~ u&HM׉8Mtu t&V0MT$U D$ E $T$D$F  UD$0M D$ ET$L$$~ eF Qv~ gF 0UD$ M ET$L$$/D$ 1U D$ MET$ $D$t&~fGUM D$T$UL$D$D$V1D$ $EW E܋MT$WD$ E D$L$T$UD$$x&EM$UD$EL$MD$ED$FT$ $D$ E D$U=1D$$vaU~$cM‹GD$D$D$<%@0D$GLD$ GHT$ $D$U MT$D$0D$ EU܉ $D$wGXU܉D$-D$ ET$UD$$M0UD$ M ET$L$$%0UD$ M ET$L$$F F o0UD$ M ET$L$$C-0U D$ MET$ $D$[M.1D$ $E$UMD$ET$D$ED$FL$D$ E D$E$ U(]G uu4$*U 4$D$D$D$D$T$ D$D$]u]ÐUEWU V1};Er"I;Mt@9s 9Ev)\uك;Mt9v\Ǎ&9vU 2^_]UWVu} VUEu ^_]ÐtL9EWUuCEEtԋUt'18Et 'v8u)DftLu1럐G}뢍&Ev'UWVEu} 9r ^_]fUƒ)UE9׉UwCOEM:u);uvȋUEM:uU9v: tM9Mr1듍&'UWVUuE 9Mr ^_]Í׃)<89} UwbGUE:uB;uv6EOMMEU:QEuU f: u9w뎍vE9E w1fvt&'UWVSE63E u }t,1ufM 8t,:u9Euۃ1[^_]Ð[^_]Ít&'UWVSUD u }t,1ufM 8tx:u9Euۃ1[^_]Ð[^_]Ít&'U(}NjEuօt9Gu }u]@u1}u]Ít&Hu&却& $MMu"ItfAuہy u҉΍됍t&UUWE V`q,`y,`y,`ɉ΃,t7̅t`ɉσv,t>rtt`ɉσv,t>rJt#`v,Lr&`1I,u% t&^_] UWVEU `y,`y,`y,`ɉ΃,t7r|΅t`ɉσv,t>rXt`ɉσv,t>r.t7`҉^I,_]DуÍt&^_]Í&1^_]fUU WV~!ET408  9u^_]ÍUWVMUu }u(v~31҅~E9uEۅ~1f 9u^_] IA U]Ív')@ U]Ív' @ U],Ív'@ U]Ív'@ U]Ív'UE y@ v 1]ÍP4t&]Ë]Ë]Ë]Ë]Ë]Ëh]Ë]Ë]Ë]Ët]Ë]Ë]Ë]Ë]ËH]Ë]Ë$]Ë]Ë]Ëh]Ëd]Ë]Ë8]Ë]Ë]Ë]Ë]Ë]Ð&UWV M qy AQlfgfffiEE)1im‰QE)u)ƍU<X1iykQ<Q}*EųEU )‰Qiu)ֺ)‰Qk<)ֺk91u{)i:i)E42sm)kdEEiƬ)lj)‹EiҵE)׺)‹EЉEim)u_fE-lAy qIB1_t&{׀+։}<4:gfff)i)} EE-lAfA q}uim)ƸQUU+U)֋U))֍<8)yqv)u$I)))Ɖq ^_]ÐE.)UiҀQ)׉}t&E.u)iQ)Ɖux+UUZt&u+EtEu)ЍpiQu/gfffiEE)1.t&U]Ít&'U]ÍU(uu ]sp; }}u1]u}]Ðt&Fu6t݋F tրxuD$rD$<$t@뵍&t$<$8F빍&USU : t$&[]Ít&USEU ò: @ Jt'@ R Tt9u[]Ðt&1Ҹ9tu 1[]ÐtT$ $l[]Ðt&UWVSLu63: xB 884$|$Tt@EM ɋB(BRJMԍcMR:cteP M9JM z E4$D$lD$ |$4$D$E!E4$D$貹L[^_]ÍMQ:duQM:QuMQM:QtlGЃumuNGUPL[^_]ËR M9JRD$D$ D$|$4$ft&|$4$8G롍&D$|$4$Gr&T$4$@ ^t&U8]E fc8 u}}$t)9s4E T$UD$E$?UE]u}]fWǍvU8]E7 u}}$M $t6G9s/)9s4$F4D$4$ׯF0F44$TD$4$藩hdžTH AA@d+V PP V @ F@9hNDd;NHND)׉V)ƒM܍PA9JD$ ED$} 4$|$U؉MU؉BMԍ5D$D$4$Gh@d+V QR V  I N IhF0;F4d~4$44$<[^_]Ë@ @P D$ D$D$4$vD$D$ 4$hAhH 7&}4$|$U4$D$辳Uf4$ENDV E\Ttx t=4$DT$$AD$4$T@ @t@ u뮍'U8])&& }uƋL<$E䋆Ttx t;4$7D$4$kU|$T$$D$4$ht&@ @t@ u밍vU]Ö% uuF$t!0U t$$T$|]u]ËE&'U1(uu ]1.% }t'4$x<$t|$t$$]u}]ËEU(]$ uu}$迴uf4$t ]u}]ÀvuPUVS E wt$ @ t4p RBE$Ut$T$$W [^]Ít&D$EUT$D$ "$U믍t&'U8]# uu}} V$U.Ut#0t$|$$ӿ]u}]fT$D$$`fU1(uu ]~# }t#4$1x<$|$t$$f]u}]Í'UWVS\U&## }DM1„u`UR U؋NMUЋU MM R UԋMJUU+M+MU9|(;E}MD t&9E~;u~ f1\[^_]ËM@1Vjt&uuUЉuu؉UЋU+U9u܉UuEMuDt}9E~xM;UuU9Uv@tuUM:Uu(MĉƋU؃ &9Uv:t;Uuuu E{vM̅t?U t8UEt&FP9uV EU܉EЋEMA%=u MV P+M܉);E~utElU܃FL$$T$wIDUWVS\uó M F PUF EЋE)9EQ҉VE̅u }EЍyM@8ˆE(9p:Eu"v9XGw:E8tŐt&~}́Eȅun}thE)9[My NuЈM8MH}ЉM̋u̍J9E8M \[^_]ÍE@EЉD$}Љ|$ EL$D$M $U辱Uu}tEM)Ѝp:uFT$L$$脠xqED$ "D$t$U$MMUEЋE)9 v1\[^_]ËMA< 9u8Q0σMЍp üM׋uM:u}ЍJp9}81돐V…uu69Mv}8twuf8tl9wҋ}j1AvEUx )G&}ϋM:Q(1r9u u: $D$t$MM}8}8W,vvx}̈Mf9vG&9v2:u:Wvt98WvRАt&}ЋEЍ|9M}̉UȉEvUtJ9Mw;M@Eȋu؍<Eĉt$<$D$vEȉϋUĉMЅ: tMЃ9Mv뉍t&UWVS\E u Et>F t yvD$ED$D$ t$$ܧF% =ED$ED$ Bt$$kEF<% @FE=EEED$Et$$UiEV EJMMet1M̈ ;Er}}9}r;ũЉUu t&9tHM:uU(ƒ9uűED$D$D$ BD$t$$/U~ Et>1uЉUvEԃ;Es9r;EruЋUPMԋP@d}ȅtN\[^_]Ít&@E?vEEÉM)MmMD$t$ $t&UD$ t$$ŶFUD$wt$$MD$D$ t$ $ǍvD$JfW [W PzEfmUS E$[]Í'USEÕ t$軬[]É'U(]if u}(;Ut]u}]Ít&u49t4t!$8u f$8萍&U8] uu }}$謧Et1tt$<$5t-]u}]É4$鍶<$1׍t&U䀺vuljt&UWVS<9 uEED$4$EEEEEEċEEȋE E̋E$EЋE(EԋE,E؋E0E܋E4$D$KEEEEEĉEEȉEẺEEЉEEԉEE؉EE܉EEEEEE$.EEEE$@NjED$ E D$@<$D$F?uE 8tuE $p@4$|u|tMkdUt&9u|c<$t$ٿt'ED$ E t$<$D$9}Ʌ~Őt&Č[^_]ÍvgČ[^_]Ív<$1*Č[^_]ÐUX]yv u}(0;ut]u}]Ít&UE $U$ 8AM̉Uȉ$[|$ƋE 4$D$D>>=Uȉ$T$UT$MD4$h^&E 4$D$ͪE܋9ЉUMMEM؋U$E $U$ MME܍AM̉$UEU |$$T$E8=U<U܋E<$T$D$UM̋DhU܉ $D$藽M܉DAM $詚/U܋MUUЉM 7taJ0 w{D$ D$4$蕒JЀ wJЀ v t t 7[^_]À &t΍J.wɋ4ۍvӍvˍvt&뾍t&뮍@t&랍t&뎍t&{vt&kv t&[\8D$ET$$N 988҉D$ET$$)'UWVSlu 趽ó }F tv E@ tP Ut$<$E<$D$ׂ~T$ UD$ D$D$ D$D$D$t$<$Ƶ7@ L$MD$ED$D$D$ t$<$腨UD$ D$D$ T$ UD$ED$T$D$<$EM8rT9N$D$dwUD؉$UM:rD9t$D$D$ D$D$E$Qot5@ `^D$F D$U$R^F HM1ǁ\[^_]ÍvUD؉$]MD؉$NE1\[^_]Ðt&x6D$M $nE8w1EEC&EЉ$Eh8$6D$6D$M $ot&E$kMUMD؋T9$D$uUD؉$UMUD؉DD$ D$U$D$&8hpEUE1uĉƍv)D$>D$EЉ$nǃvԋEЋuĉ$躂UD؉$諂 ]ZǍEEĐD$ Uĉt$T$M $&u?t؋E1't&EЉ$QEԉ$FEЋuĉ$3qED$UD؉$]\[^_]ËEЉ$D$D$Eԉ$跎MD$΁MD{Eԉ$跁,D$|$M $+y|6D$M $6D$E$ED$ EԉD$U T$M $\$jt&UWVS\Y \D$E$kU 1M:wEăE+E؉$EЉ$ X8 J$ t|܉fAE${hUMċD؋T9a$eMċDD$ D$U$D$=}xpEUE1uƐt&)D$>D$EЉ$l ǃvԋEЋu$UċD؉$)uWǍE}ĉǍ&D$ |$t$E$9uUă:t؋E}ĉ1,t&UċD؉$]MD؉$N1\[^_]É $d6D$6D$E$Ekt&$D$@qUċD؉$~MUċD؉DfEЋu$~M L$UċD؉$PZ\[^_]Ít&Eԉ$~EЉ$~Eԉ$~~13D$D$M $EuE$t&EЉ$F~D$D$Eԉ$EM T19r9t{$D$IpUD؉$}U MĀ:rD9t$}|$EԉD$UED$DD$ ЃD$M $vx$gMċD뮍6D$M $US螗Û $$gU UUT$U$T$afUWVS<} VS u9V҉9}UEm؃4݃<T$$̀E4$D$P E$UD$D$mcUԃ<[^_]Ít&dž$@ևf $M~Mԅu"@ $nuC6D$lD$ T$$NxD$$66D$lD$ T$$UWVSU Eý UeU1ҋUEEEB+ D$$uUNj6D$E\$D$ @D$D$@E$[?|$$tUF f0u ulju.t}UE|$T$$|lED$ UEt$T$$\8}4$9EUe3)Ĝ[^_]ËET$$\yUBuvU@EB D$E$E^UD$ $hd9D$E|$t$ D$ $$r>UED$VT$$etKP T$@D$E$XkƸEUD$ED$ $D$[8UB$蝂< UWVSLI \u} D$4$r{EE؉D$|$4$uVG!D$ |$E4$D$qD$U4$T$mEE\[^_]ÍvD$ 4$,U؉E܉T$E4$D$oED$ D$4$oG .FD$D$D$D$ UT$|$4$}tRD$4$|D$ D$$D$D$D$ED$D$ Uԉ4$T$胊7D$D$D$D$ ED$|$4$J}tRD$4$V|D$ D$$D$D$D$UD$T$ Eԉ4$D$?6D$D$D$D$ UT$|$4$|D$ D$D$ D$D$ED$|$4$D$ p@ D$ D$D$ D$D$ED$|$4$D$ !D$4$D$諄D$4${D$ D$$D$D$D$UD$T$ Eԉ4$D$轈V6T$D$D$D$D$ |$4$U{UЅT$ D$ D$D$ D$D$D$|$4$94$D$bD$ D$$D$D$D$UD$T$ Uԉ4$T$D$ D$D$ D$D$E؉|$1D$4$D$ 複@ EJD$ |$E4$D$q@D$4$yD$E܉4$D$谂U4$T$O9YD$ |$U4$T$Rq@ uD$ |$U4$T$/qD$4$D$艂rE܉4$D$%RD$ D$$D$D$D$UD$T$ Eԉ4$D$蓆E\[^_]Ít&D$V|$4$`{x |$@4$D$Re|$ D$U4$T$ElEЀ8vt<"D$D$T$D$ D$U4$T$VEЉ$܄cv D$ D$D$ D$D$UD$|$4$T$ 虅@USތ ED$$qu[]Í6${ US莌Ë \$du[]Í6D$lD$ S T$$~{fUS>; \$Ltu[]Í6D$lD$ E T$$.{fU8uuE]U ݋ }D$ED$EE$U4$T$D$ w\lU@ Pҋ\t)u%p t9D$$Np2uۋ]u}]Í&4$l T$$M$辆fUES$EED$E D$E$N$[]É'US辊û $$ZU UUT$U$T$N$[]ÍUES$EED$E [X D$E$k^$[]É'US.+ $$ZU UUT$U$T$^$[]ÍU8]ى }}u,ƋE ${fUt$<$D$D$D$D$ E T$D$VF ]u}]É'UES$EED$E KH D$E$T$[]É'US $$ YU UUT$U$T$S$[]ÐUWVu @trVUщVNMPυt8 t@ u } ~JtB@~R t*~u`u ~^_]Ív~ڍv~vU1U Mu ]Í&@u 쐍t&tP 9u]Ð&UVE0t_RptJE@tF^]fV(҉x N4t&9tyuփyʍ&^]Ð&UE@ttM L$@D$E$1UEH1] USE ut 1[]fURD$#$T$ztt@1[]Ít&'UEtUB tƀ1]Í'UUEu` 1]ÍH 1]Ð&UE UB `1]Ðt&UE@tPtM L$@D$E$1 U8}}uu ] w tdPv?It6Nt_ ʉP t"сMtp!ыU щHvG$;FuW G$+G$]u}]ÍD$E<$荃EP돉'UU Eth$]ÍU] uu@D$ E@D$T4$D$RT1]u]Ít&UVSE跄ô uP tWD$ T$@4$D$ @U D$T$ T4$D$QT1[^]Í@뿍vUWVS}h(% LJHd ELt狅d$-Bdt$$KqLdD$$D$l4$D$D$dD$$D$kEeĬ[^_]ÍUWVSLI $5SƋEDVL4NE8FPMDL$$mDD$$T$hD$4$)DEtn$EtnDEuP@t@4$L$f@8F4VLD$4$U@ @t@ u눋@ @t@ u묐UWVS{ɻ t@ t&t/D$E $vu䋃)[^_]Íu z:t2M :::u2A::u&A:BuA:Bu[^_]Í&[^_]Ít&'U]z uu$JtQtL tG\u>LHwH~79D$xT$$pt&D$D$4$]u]Í'USNzK ,D$D$E${p Uuu]z F$q1FF ]u]ÐUuu]y Ft$CqFF ]1u]Í'UWVSU vys pu2vwt_F u^4$pU xt^F>t@tU t$T$U$ЋFtV gtN ~$pF tFUD$$ 9f@E `1[^_]ÍvD$E$8RUSE xÅ @ t%@ D$D$$`[]Ít&D$ED$ "D$$ w UWVS\Ex }u @8~PwX;F<1„t58t+z u%R tRt@B(t&\1[^_]Ét$D$ L<$D$$V\1[^_]ÍD$$xruB10 JR t$ D$T$<$Qv빍$D$UrUtݍD$$quF t&= @4F @f fF  @@@ @@8$m@@ @t$<$Uq;UB8@@ @D$ D$t$<$UnDUBUHQ]@F @ @@B,8F -x=H@HF w@D$<$ZX<$D$~:D$ D$<$ƍtD$it$ D$T<$D$:TF @|ffeD$t$<$U:aUDt&1҉}ЉUm؃4}݃<}Ủ$ ^,<$D$D$bV fBCt$<$o?<}}oV fB`t$<$7?ED$ D$t$<$KD$$ gFt D$<$,F<f LJD$t$<$_H\D$$|f%F WQED$ "D$t$<$iUEąt8E1EUU  Mȁ M;Er}9Ptt t$>LJP  T$D$ $FEE䋏ƒD$ $T$#7ED$ D$t$<$3IUD$$XL1+xt;|u; ʈ+>D$$)gx1+ɉt;|u ; +D$t$<$]`Q$_hx1+ɉ|t9Ⱥu;돋$:Ix1+ɉ_;|N;@D$t$<$U]U#D$t$<$U\UbD$t$<$\TD$t$<$\$_LJF<6+t:D$D$<$:t$<$A-ZD$t$<$2\D$t$<$\ D$t$<$\F @>D$t$<$[>D$t$<$U[UOM̋U& $t$UȉM UȋM̅EEt&G @&'UXuu ]U}}Zz x$v}Htt$UD$g|$GUԅtV@ xOEG t`@$V`1A$uPEt$$D$]1u}]ÍF_Nt։t$$CXȐt&`tD$D$D$|$ D$@0$UԉD$LU@ tM`D$D$D$|$ D$@0$D$hLUԋ@&`D$D$D$|$ D$@0$UԉD$LUD$$D$!MUt&E$D$|$4U'UHU]E uu}zXÄ R@ P`1A$u%)‰T$|$4$?;]1u}]Ít&`tL$ D$D$D$D$@0UM4$D$KUM@ tg`D$D$D$L$ D$@04$D$JU@DD$D$4$Kt&`L$ D$D$D$D$@0U4$D$hJD$4$D$tKUD$ 4$R(:D$D$ 4$*5'UWVS,NDVі UU;NHND+~ 9N);MxB}~=BR xMD$ T$D$4$R}tEE>4$D$E D$<,[^_]fu˃čt&MUD$D$L$ 4$6UYz puR 4$Um8UD$4$T$Xg&E܉U4$RNDUEt&EU4$D$ZS4$D$n"Uv'UWVS\UY ,u>4$+MhP ~BB@d+~ xH N @ F@:hVDd;VHVD)ω V)ƒxE@:>D$D$4$:h@d+V QR V  I N Ihd4$0,1[^_]ÍD$ D$D$4$4IvE4$QVDN E&E 4$D$Q4$D$ D$D$ 4$$P‹hBhP QTtx t*4$JDT$$!D$4$,@ @t̋@ uUWVSO; U E%M MM[] USEN PtH :T$U $EH1[]UWVS,UuNð B><:Mu :E4$aFF4D$4$RF0F4hP BB@d+N HH N @ F@:hVDd;VHVD)ω V)ƒPE@8MA<t}:ED$4$D$3uyh@_d+V QR V  I N IhF0;F4d~4$4$),1[^_]Ít&D$ 4$T$UT$+^&D$ D$D$4$t-vA @B @E U܉4$D$JJ4$D$^UfE܉4$iIVDN E]&D$D$ 4$H‹hBhP Ttx t*4$;CDT$$D$4$y%@ @t̋@ u&UWVS,uUKà Ez&.sD$ ED$G @4$D$Fe4$9ChP $BB@dM+N H@ EF M@ F@ hVDd;VHVD+M V)ƒPxD$E4$D$ 1umhPd+N HH N @ F@hd4$&,[^_]f9됐t&D$ D$D$4$*CvU B t'M P A L t,[^_]Ít&4$T,D$ NjED$U 4$T$("D$M 4$L$FG<:됍t&M 4$L$-G4$D$A4$EIFN VDE܉MTt&D$D$ 4$E‹hBhP &G @ZTtx t*4$@DT$$p D$4$@"@ @t̋@ u UWVSlHi ,u>4$;@F4D$4$,F0F4h@ Q@@Bd+~ z1R V  I N Ih:dU D$ED$D$ D$$t$@ xhPd+N HH N @ F@hdF0;F4~4$4$#,[^_]Í&D$D$4$0;x_t&D$D$ 4$LChPhB P:D$4$M AtE1y Vҍ t)A< t< t< ft< t < uu؉Vu FU "Bt&u@J A@8D$E 4$D$=|t&ugD$E 4$D$"O&UM ,L$$D$'&u@D$E 4$D$`&U<&M D$$L$1֍MD$ u t$ $D$fuD%^t&֍SUD]t&M8/x %@ @@(fu D$ $t$Qu U M B_QL$4$-f:uu~J:vnJ:HaR:PTEM u$L$D$4$1u0t P@t P,xEU MD$ D$T$ $I ֍ǹ ֍R_ ֍ǟU]f֍(kU1+t u (t t&D$u Et$$%t&U@@ @ @,&u@@ @@4&U@@ @@Qu4$D$E D$D$$ 1҉UEm؃4݃<$_<$ƉD$ E~6M;1UԍvMԋUD$ E L$$D$9;}|؉4$L$M AM AU|fM0P@P(u D$ET$t$ $Qlt&UD$ M LL$$D$ ?&u1`B$`򍳓tD$D$D$t$ D$@0$D$@ 1M`D$D$D$t$ D$@0 $D$@RfU@fMxjfUM L$$D$&U@@ @1@0?&EUD$ D$E $D$f t&uL$4$)U BEu D$ D$Et$$ t&A t‹MU @ $T$D$5pu D$ED$D$ t$$IHML$$D$?uU M8ƉT$ $}E\$ D$UE $D$>M A1y Vҍ &A< t< t< t< t < fufu4$D$E D$+RU 4$T$>u%A t‹@UM XL$$D$u4uUu%U`D$D$D$t$ D$@0$D$WMD$ $D$`u4$D$E D$^-U MD$T$ $oML$$D$u ;%u;D$UE D$ $D$M-;D$D$ $uJuD$ D$D$ D$D$T$ D$D$4$D$ 4$D$E D$M ;D$ D$$L$U ;MD$ D$T$ $xD$$v'UHE]Uu}HJ&Gf AE1 t8T$|$E$UыU؋@t=G tME܋I Df?u1M@9ȉEt}fu֋E܉D$M $~t\1[^_]ËM}M볐t&F_Vtщt$E$@\1[^_]ÐUEBBBHBhBxǂǂǂǂǂ ǂǂǂǀ]Í&UWVST <} $Ƌ@@%-Gv1<[^_]Í&Bt&`HBHD$BD$U8UBDF@%=a =b$ =`"<1[^_]Ív`hBhD$Bd$UUBdF@%=H=I=Gu?PpT$PlT$PhT$ PdPD$<$T$`"QA|$$t&ѠD$$UUF@%=K=L=J?T$T$T$ |D$<$T$"`"A|$$IѠD$$U7UF@%=N=O=M?T$T$ D$<$T$`"6A|$$!ѠD$$UoUF@%=QK=R=P5L$L$$D$|$L$ U`U"aA|$T$$H&ѠD$$UUF@%=\=]8=[U?T$T$ D$<$T$b`t<"A|$$}t&h&P&@l;f(&&PpT$PlT$ PhT$PdP$T$g`t"_A$t&T$ T$$T$ `"gA$Vt&?T$T$ D$<$T$`"A|$$LvT$ T$$T$`1" B$t&L$L$$D$|$L$ U`U",A|$T$$sfT$ T$$T$`"A$t&?T$T$ D$<$T$`3"aA|$$LvT$T$ T$|$T$`"A$Ft&L$L$L$|$D$|$L$ Uc`Uf"|A|$T$$cfE䋆WHpL$HlL$HhL$HdPT$D$ |$L$E$UB`U"|$ T$ED$CA$;f?PLT$PHT$ PD4D$<$T$x`t""jA|$$f@LsfPLT$ PHT$PD4$T$&`t"6|A$%t&?PLT$PHT$ PD4D$<$T$@`f"sA|$$'UVSuG DJ $@$@ $@D$@d$@t$q$]$I$5$!$ $$$$$[^]ÍUWVSH u$94$G$@G$G GH$GDGh$GdGx$Gt$$$s$Y $?$%$ $$[^_]ÐUE]uSPG pDpDH )u]u]ÍT$U $T$&'US4EU F D$ D$D$ D$D$D$ T$$T$>1t@4[]Í'UHuu]}} ]ZF F D$D$ D$ F D$FD$FD$D$ D$E$1҅t9wt]Ћu}]Ðt&WUWVSlUE JD1JDJ <)XuԋEuЋ4F @EN MD$ D$D$D$D$D$ t$$UȉD$UEtHMă} Eąthuč;$UD$D$D$D$ L$t$Uȅt%B uԉ EB l[^_]ÍB ِt&E$UD$ D$t$VUȉE&u̹ ;;냍BD$E $D$3&UH}} ]uuD tj9wF D$D$ ED$F D$FD$FD$D$ D$E$gtE]u}]Í&9wt[ED$ $‹@ GfD$ G|$D$E$bGEGDt&EGF D$FD$ FD$CD$E$hUWVSLuB FDV >FDE+E7}D$ D$D$D$D$D$ DD$4$D$xD$ 4$EtS|$4$ -fD$4$@4$D$4U4$T$D$!D$|$4$MuF+EED$ 4$D$D$EU}4$T$4$D$UB>L[^_]ÍvD$ 4$E뎍BD$E 4$D$nfU(E]fcA uu D$E}$tdF9t1Vtt7FF ~FtD$E$菿]u}]ÍD$ET$ t$$밋ED$BD$E$t&'UWVSé@ FDEԉ+ED$D4$D$‹F)~S1ɅtH B DteHWU4$MGM4$D$L$U<[^_]Í|$|$UD$ 4$U닍T$4$덍BD$E 4$D$'UWVS,u= VD:VDV )ED$4$D$V U䍓BtJ P Tt]u}]ÍBD$E 4$D$BT$D$4$'t&'U(uu ]}}ê4 F tZP F Dt*@t1t$<$D$]u}]Ðt&t$<$ȍBD$<$CD$<$&'UWVS,u4 FD>FDF )OJMMMUD$4$E܉D$U؅uoF zM؉4$D$KM؅D$L$4$}~ D$4$=F U4$D$FEF ,[^_]fD$4$fD$ 4$4$NjE܉D$|$4$D$UV |$4$U޶4$D$ҿU؉EF 녍CD$E 4$D$F 4$D$BD$fUWVS|E Ã2 @ uupDD$4$‹@ B t΋JUMt@E=UԋMD$ $UuFUԋBtMD$ $,uF}ԃGEMUD$D$D$ D$ T$ $D$@EtEȃ} uMȅ1;UD$ED$D$D$D$ D$$ME}ԋGtD$E$萯UȅUȍuMT$ $}ED$<$D$t$D$<$ UD$ <$T$D$tJ P T-tpUD$<$走UB}uB BtUD$<$ŮUBKUD$<$hUB-t&BtUD$<$>UB덍U uMT$ $7}P U@}ԉűuEċ}ąDt&}D$ D$D$D$D$D$ D$4$D$x t'|$E4$聯D$ 4$UljBEԋUMD$D$D$$T$ L$|$4$EȅtyEȉ4$D$貭}Ћ}JỦD$4$T$MԋUD$D$$L$T$ D$EЉ4$D$0D$|$4$輴um}ăE|[^_]ÉD$<$uԃF E}ԋG'D$E$]G u; n} E|$$rE&'UX]ö- uu }}t$<$‹F T$D$D$ F D$FD$FD$D$ U<$D$Ut ]u}]ÉT$<$wF D$FD$ F<$D$DD$^fUWVS, 4$Rt3d$.u'~d~$cu0t[^_]ÍED$lD$ X T$$ED$lD$ Z T$$ U(E ]uupm* HQt@]u]ÍA@ tPUA@ ]u]Ðt&UT$D$ D$E$U̍vUWVS}) u &t&ƋF$WuLJ [^_]Ðt&UWVSLuÃ) }F"RUv uEEG@E܋W ŨEȋEUȍD$&ƋE U܍F$T$ỦT$E܉F G% ҃P}UIUUԋUxUԅt%UЋ}׍v ȉ 19u 1ЉFEԉFUȍDUԉ$T$UЉT$zEt EЉ$ỦFVL[^_]Ðt&uS;*< 1҄E܉D$ED$ "|$$E̋EEE$U ƉG%= @F }EUED$ ED$EЈUĉD$E$豤UĀ}уM̉EUwED$ED$ "t$$EЋF0@F E(G @t&EUE$ƋE UEU(]urï& p ~5@tpPt&tf0vEt$T$$t&tu݋]u]Í&D$$|]u]ÍD$$UUJH r qA H΁DpRpPuD(HzvR $T$]u]Í&R $T$]u] UWVSU~E D:E t E$]u}]Í'UWVS\u UC@" E܋@ 9ЉE}$׉!9t !!9u9~9~\[^_]ËF EƀvUԋF%ЃЉ$‰EEEЋF MЉ$ỦD$L$誽FU̩E}?CMāЃEЉD$F ỦD$E$ŰMƁv+EUD$D$$E܃}x UV HU؅1vMt@ΐt&P#U9)M ɉt,uԋE9}E륐t&M܃AˋMщMԋN @ ȋMԉEE@AMEԋIHMI H MAMԉAF Ủ$U&WU܃j\MƁvD$$E'USE õ D$%D$E$01tB []ÍvU8]yv uu}} D$%4$|$tUP ]u}]Ðt&UtED$D$D$ %D$D$|$4$"uED$4$輢뜍&'U8]E  }}uD$%D$<$8tF ]u}]ÍE D$D$D$D$ %D$D$<$uu0ED$<$ UWVSlu ҉ẺUE7у AtAl[^_]Ít&Ű8}ȋW }#x UЋt!9uf9‹uu1ED$Ẻ$tOEtIEMԋEtEԃ}̉D$ ET$D$|$D$<$`t&4E$l[^_]ËUfu1HɉHu΋ }Ћ?$qMȃi묍t&E uEU}UMȋp #Q }UЋtaUt&tREĉЋHuM;1u} ;yu΃9ut 9}uɋuM T ;UuuUā%uUȃj)E E؉EED$ ED$t$Ẻ$)UU E1};uE EfUU ED$D$$hÍUVU MuEU1҉M u^]8&UHuu ]U}=: F uz]u}]ËEUD$Pt$$Ut͋E$舽UNjBPt$T$D$ E|$t$$*땍t&D$@֍t&'UE ]Ó uu@4$D$蠪4$D$d]u]Í&'U(E ]}}u=: @ t9R P rt#Bt$D$<$)t$<$=]u}]Ít&UVS@  tTR $T$NF R D@ @@@[^]ËD$@ $fUE @ tR P ɍBÐt&CɉBÍUVE u@ tR P r^]Ðt&tvUVE u@ tR P r ^]Ðt&tt&&'UE @ tR P ɍBÐt&sɉBÍUE @ tR P ɍB Ðt&3ɉB ÍUHuu] }}tGFtP tUD$<$ FxU B u#$?]u}]ÉD$<$fuP J uJtU B tJ U R TlM E<$L$蓦ER&@<$D$UF$V'UWVSLu EЉU@ EE؋Eup t&19PuɉtURUMR UԋQ M;D EU @BmuU12N~tT$EЉ$5)1~MzrtL$UЉ$9tnD$ED$UЉ$L[^_]ÍD$ML$EЉ$nnt&mmL[^_]fMjMa농U(}} ]uu]Z @t/|$4$Wt]E}u]/&]u}]Ít&'UWVS\UE̋ Eԉ‹@ EEztMủL$4$Թ(UƂvMuMċF%Ѓȉ$EUȋMuUA T$4$D$mE@E}?EUM%ЃED$B $D$uƆvE+EȋuuD$D$4$褠EUԃEB E؋MA 1Et&u؋ tpEE!v01202Etp6#u9uփEuE؋ u9u}uЋE9E~MMЃ9}t}ruFaU9R%ЃED$$EЋNMuEԁ u@UBJ % B}MEEċU4fM؋FM̉EUE܋R҉U|t#U܋}א ȉ 19u 1ЋUȉDžM9FPL EԋU#x 0u؅eEu9uBE@ EU$MuЋMq \[^_]ËuԃFMԃiMMVt&'U18M}} ].+ ɉuuEx)D$E $D$<]u}]Í&EىD$ EMED$|$4$M1}9t 뛍UWVS,}Ó E u@ H R ʉUtED$D$$MxMt"M<ʉ щ19u1t,҉ 1ЉUD$ Et$$D$M,[^_]Í&tEt&sEUD$QED$$ UWVS|y \ED$ $E܉‹@ EЋJ U E&E M܋PEЋI !ȉEM UM&p}9>uU J;NuR| 1׃uу`@}ԃ9uM ɉM lE؅t}؋U܋E<$U܋)xM܁Iȃ\[^_]ËE} WGUԺ`@toM D$Eԉ<$TD$EWFU EI1;U؉FUtC}7U܋@M ɉM 6fU J Q놐t&} W zM܋@벍D$$贱}܉G <'U(uu ]}`] FtaR <~ Wt@u$G G]u}@]Ít&%FET$t$$詋뿍v&'UWVS+<$Qu'D$ED$<$E]u}]ËI T$ oED$EL$T$<$]EǍUH]ٿ }׉uƉ$VuBU D$E4$T$ UT$ўEtH D$E4$D$ϵvU D$ED$T$ U4$T$wE봍UWVSu 30 }u1Ĝ[^_]fU BuV;UUuރ9uut }9҉uȋMȋuԃT3Uuu EUȃM;Et5E W U} 96EEt U JMA; E UD$$}u$Mq&<$DvMEuD$ "D$L$4$[U(EtUB% = 3 uMxt"U֍v ȉ 19u 1Љ‰U(Gt&E MD$UT$ ${PJ@EԋE EFM JE Ut$D$$谎NEԉMFE(t&H u1U}Mu  ЉEEȉM̉MEF  E@1t&P JwPut{EEȋu(UM t$ uD$ED$D$|$ D$T$L$4$M! p FP } u 6uU R ҉UNM}}MrM IMu}|t U֐ ȉ 19u 1Љ‰U(uȋ}ŰE(u#G E7Ef&UЉ‹Ju(M;1uy;}}uى΃9ut 9M̋}uË}ԋuD7 3EuEM ; B9 Ett@ t& Ev 1E  M A & }ЉE8 } Otx E @ ;T  M }T$L$<$zUBBu M avMED$ ED$|$ $u}EfM;}EEEME((uF1P JwPCuUEUwE+tUB1MUE$D$ĊM $D$襄D$ED$ E$U MD$T$ $}t EƀE;<$1.v}9G,EuEveuD$PL$4$茤UMMuL$4$׉EԋE$YMԋu D$L$ t$‰D$EU$MU G F@FMԉHVET$UD$ $譓U@(Tp$EMFU MD$PT$ $荣TE$zU$mU҉EEUD$$轈MD$ $螂D$D$ EԋU MD$T$ $E2}ԋED$p|$$Ut$$D$菚F@E 1T$$臮¸&EE6E _uD$F $՛U B bEEn}1<$ MfU(kEtUB% = uMx&U֍& ȉ 19uEt E vu u uu ~ E@ EЋE>U B ?UM 9EU(D$E$UFE(#EЋM$;N0vEt U JMA҉A};G 5E @ &uU E}D$<$E$E @EU(M$u}D$ET$ U L$Mt$D$E|$ T$ $D$J&E(MUD$EL$$EFAEAE$踩<$諩EvM $t&臩1t&1uED$ ED$|$4$o}E,M;}tEM} G OE̋U-E E}D$pt$<$<$VuU4$U6BUD$E$G|Uz <$Ҧ}t#EMD$ |$D$ $詫WE|$ D$b<$茦RBUD$E$"oUzU MT$ $ʫ mE @ <x 5B @E(u9E$M uL$4$X(rMi;EU$ {FUU @J?F 80Mt$ $EMU|$% D$ E $D$>UEEzE1$YEt u4$wE}D$,GD$<$蟣U̍XFD$MET$Uȉ $AFUD$E$UD$EFuD$EUȉ4$D$EU UaEt E$XE Eu~EUD$,GD$$Et u4$}E~EfUWVS\Y \uD$ 4$Ť} E\U HL@ EEB ptɍP9vvP9ruMB } 4$|$jG4$D$~EG4$D${UD$D$ hD$T$4$D$E]Eԉ4$D$kG}PD$$L$ ML$L T$D$ D$L$|$4$ȣE D$4$D$Qq;U؋M 4$T$L$v}܋E 4$|$D$˧U4$D$D$D$ HD$T$茩E\[^_]Ðt&} W z }؋RUrfUWVSli lD$ E$բu E5U HɉM"@ E̋BDEEE̅t"UċE҃9rEH9ruE̋UЋM̋H E D$U$h}[FF<$D$U|NUqT$ D$D$$D1 t$L$ D$D$MЉ<$L$D$E <$D$ouUT$M L$E$tUT$M L$E$EЃl[^_]ÍvM̋U B H M@E&% E؋B ỦE$ EEȍMԋE4EuK&L$M܉$L$UEGUU:6}FPUM܋PL EUMNjFD$E${GM؋UɋMuL$E܉$EGUuMԋEȉ<6}uEU9UMЋŰP MĉHUЋM RPEЋUȉP EЃl[^_]ËUEU9U뭍'U1҉S4EFC xEM D$ET$D$L$ MD$ E L$MD$EL$$裟4[]Ðز뵍v'UWVSMM Uux 40~}}9}|ۅUH 4U19UtBH u0V)t)}4 &R<2uP@P ^_]ËH 뭍v'U8] uu}} D$@4$|$Xt]u}]ËD$D$D$ @D$D$|$4$螒H 봍USE XU @ u @[]fD$E$[]ÍvUH}} ]uu G u:;pG U9ED$P|$$EEU$-UEt~RsWGD$D$D$ D$ D$B U@$D$ߋt.@ t#B`Hu)G @yv1]u}]ÐUEt$D$ $D$|$"uEUD$pD$$8UD$E$D$ʄUtUBtlzPkaUB 80RG u@05t&E|$$Ւڍt&u+U &U@@B 80t&EUD$D|$$ Udt&tr 1U|$$0&EUD$$BU|$$ΛD$E$jhET$$ vUWVS,u 趝ó }Ft+@tft x It$<$BbA x%F @u'F +At A AF A,[^_]ËQF Ut΍MMu܉}׍ƐUMD$ $8]uu܋F 늍fc,<$D$D$ 'UWVS,U 薜Ó uBuiU @M A A @8t A U B h hB @qT$4$蠄`&M D$P4$L$草EphH AA@d+V PP V @ F@9hNDd;NHND0)׉V)ƒMPA4$uGD$D$4$莁4$~wh@*d+V QR V  I N Ihd,[^_]Ðt&D$ D$D$4$D{4v4$T$wmZt&} U܉4$|$*4$D$>gUfE܉4$INDV E&UD$D$ 4$艖hAhH U,4$D$D$!Ttx t*4$DT$$g\D$4$7s@ @t̋@ u} G E 4$D$&fUWVS,U FC uBuYM @} JG 8}䍾8JE @ @pD$4$\_vM D$P4$L$MEhH AA@d+V PP V @ F@9hNDd;NHND@)׉V)ƒMPA4$ޏhGD$D$4$T~E4$;th@7d+V QR V  I N IhdE,[^_]ÐD$ D$D$4$x4v4$T$7jE\vu멐t&} U܉4$|$ڔ4$D$cUfE܉4$NDV E&UD$D$ 4$9hAhH U,4$D$D$ьTtx t*4$詍DT$$YD$4$o@ @t̋@ u} G U 4$T$։fUWVS ,}D$ <$eM ɉEE 1҉UEm؃4݃<E $U؉E܋M܋HJ E؋E B BU ~A1vD$<$}U܉MD$ D$<$T$s9u ċE؃,[^_]ËxD$$E'UWVSL} uG 4B 9EEJG 9ȉErBUʉU1҉EUm؃4݃<aEЋUȉD$E) $D$U輂UP G @HO t&t"M؋MčDM؍vuP B9E_UEUm؃4݃< t&P9wUEm؃4݃<~JM$EȋJ EMm؃4݃<<BL$D$Uȉ$_oP @]T$@4$D$׉MȉHP@ EЍLE+EЉE9dG @t%EЅtEЁ2uPW M؉H L[^_]ÍD$P|$4$0E4$MhF4D$4$YYF0F4hMP BB@d+N H@ E؉F M؋@ F@ hVDd;VHVDz+M V)ƒMЍPAz4$UEtUBUD$4$T$)QlG>D$D$4$wh@d+V QR V  I N IhF0;F4d~4$a4$mL[^_]ÍD$ D$D$4$qv@$i|$4$U蕎4$D$]Ut&D$D$ 4$‹hBhP Mt&4$EyN VDEMjt&MȅtQEкgfffE)EȋF )EȃeUȉRV E؍V1E[MM}EMEMm؃4݃@ @@ Ad+~ yI N 8? <~8?<>hFDd;FHFD`)ʉFM)9UЍOM܋B U܉E~#U1t&L9uM܍ M܋E܉4$裄sGD$D$4$s4$ih@-d+V QR V  I N IhdL[^_]f|$|$L$ 4$l;EA U A )J )E% X&M 4$L$赉4$D$X4$܈FDN D$D$ 4$)hHhA EjT$4$NdxD$$zTtx tF4$艂DT$$MD$4$d,4$D$D$[@ @t@ u륍v'UWVSLM֊ u }F qYFtk@9F@;x PN 9׉UF @?EF @HE9EtLA EAEE}|$D$D$ t$}|$E$U܉MԈM؋U܋}ft y It$E$UCrU܃L[^_]fF @u7U9dkUUUԍt&PEP9xt$E$%bt&D$Pt$U$vpP3WGD$D$D$ D$ D$B @D$U$yt@ B@4E9E1҃L[^_]Í&|$t$U$c 4fEEmt$U${t&D$M $UHHUt&u{, Є3F @1%|$D$ Ut$T$M $\1&P땍t&tB 80낐F @1&R UUUU)U};}tUPU_t$E$z&t$M $訄D$E$ST$M $t$E$ZzH,D$D$M $|&UWVS<}VS u NjE @ u^U ;x M PI MM A @9KM䍆EM9U fD$PD$4$`sEt4$U}F4D$4$LF0F4hU؋H AA@d+V P@ EF U@ F@hNDd;NHND+UV)ƒMPAJMԉU؉4$sgU؉BD$|$4$]DMԍ{GD$D$4$kh@d+V QR V  I N IhF0;F4d~4$ U4$`<[^_]Í&D$ D$D$4$d v9}HM䍆E܉u}׍ƍvD$E$ DU܉9}|ߋM u}xM A @uL$4$,ldvD$ E |$4$D$gb?D$D$ 4$hAhH Ut&E؉4$IV NDE؉Ut&E U؉4$D$4$D$OUTtx t*4$&zDT$$ED$4$d\@ @t̋@ uvUWVS,u 薂Ó }F F @t>QЃt4&N  EU<$L$BUEu؋A$y@F @@ F t t$<$F,[^_]ÐD$Pt$<$xoXD$t$<$d?t&'U(}} ]uu蝁Ú tBD$4$D$BvED$D$ 4$D$E`]u}]Ít&D$ 4$y몍t&UWVS,U &# uB)u1}|$ U @4$T$D$_,[^_]Í&D$PM 4$L$UnEthH GAA@d+V PP V @ F@9hNDd;NHND<)׉V)ƒMPAMBJ4$wGD$D$4$Wf4$O\h@d+V QR V  I N Ihd,[^_]D$ D$D$4$`@vD$D$ 4$U{hAhH U} 4$|$U|4$D$KUf4$E |NDV E,4$D$D$uTtx t*4$uDT$$eAD$4$5X@ @t̋@ ut&U(}} ]uu]~Z t"U4$D$T$Cr]u}]fD$ 4$vʍt&UHuu ]}}} F uJ;xMF 9r~P]u}]ÍvED$Pt$$%kBWGD$D$D$ D$ T$@ @D$E$ht;@ t0PtRw2t@ 80t&uF @fE$Y_D$ ‰D$EU$ ZUE|$D$ T$t$$QU@(tP$$&t zt&Eu11fuS *fED$$Id|$t$D$ E$Z1PF ug@1vEUD$Dt$$2iU Et$$SyD$E$dHEt$$ o덉D$E$|tNEt$$nM UWVSD$pUT$E$ngUqT$D$pM $,?UTBWGD$D$D$ D$ T$@ @D$M $et2@ t'P(HF @&t$E$lT$M $91҃<[^_]Ðt&t$E$U:aUMM iN 9Mtt&0R@ 80t&t$M $PHQ&th vD$Dt$E$UjeUt$M $uD$E$DD$E$p\t$M $?k_,D$D$E$mUVS=w: uF&@4$ЅFtHt4$EӐt&Ɔ[^]ÐUE]@ÍvUUB`]Í'Uuu]và V)ƒD$ D$D$4$.WNPHF]u]Ð&U(uu]}@v= V)ƒD$ D$D$4$VNPyN HF]u}]É'UWVSluԵ EB @EB EȋMԋADA tF V EBu8< o%=_B TPIB ?P1Mt[MT$D$D$D$ D$D$D$ |$}ԉ<$UmUt x tD$ }ȉt$|$Eԉ$UoUZx l[^_]ȃ$„E@EV ŰM̅tiD$ D$D$D$D$D$ t$Uԋd$D$lt@@ Pt&Fȃ!f&U̅t}D$ D$t$Eԉ$Bt x MB@<=wF tMԋ`@$vB<-B<"_Fȃ„ҍGuKD$ uȍKD$t$}ԉ<$Xit&ED$ "D$T$Uԉ$qE#ft$Eԉ$1F/@ @l[^_]fV fBU̅NED$ "D$t$Mԉ $FqEfẺ $D$OỦT$Mԉ $S`&D$ ED$ẺD$Uԉ$gD$Mԉ $E\D$D$$D$ED$ ủt$M1d $D$^]UfG H@ Et5EԋEċH B DH@ E9EG Ht&V B}1<'tf<:Aqt<'uqωuAu+EȃUȉEUD$ D$M̉L$uԉ4$e}̉|$ED$ EЉ4$D$8HD$fvAq<:hy}Љω_fD$D$Mԉ $d"fuȹIQUԋ`@E̸U̅E+vEỦD$D$ lHT$T$MЉD$L$uԉ4$*f@ 4P)uԋFD4Ep L$$UjmD$Mԉ ${<Ut&Ẻ$1LEMȉMЅҸ,B u3D$}ԉ<$e&T$Mԉ $^UH B Dtpű@E1G%=t5EȉD$HD$Uԉ$euȍGD$ $t$euȍ:uV:uV:PuV:Pu3}뎋F @/t&'UHuu]}@n= F>PtgB @EF) |$|$UD$ 4$NUԉǍEO$MGMԋF]u}]Í&P F뎐t&U}}u7B t B x t$G7u}]Í'U(uu ]}PmM F ЃCV fty G @}@}`} uED$ $?eF F@FtEt$$U]u}]Ít&Et$$+FЃ9N A-t +QfV $c>=t&ED$t$$}I}@1ED$ $dF E~&MEm؃4݃<!EЅ4}Ћ?}9}~`Eԅt/}JzF|[^_]Ít&MЅuMЋ ME@ tȉD$4$UHUE뱐t&F@EE=}E޴ fEm]mދM|$}4$|$U+EЋUE7fE HLD$$2V}4$UMsIEЉD$D$ 4$,D}Ћ@(y|$D$D$D$ yD$4$we}̃Gx$}ЋMH@ UBzFu}f|L$4$D$*D}ЉL$|$ Ẻ4$D$U(UMD$|$4$U@HUv'UXuu]}eý F>P҈UPNR RUM L$ @M4$D$EԉD$DHMF)~9uB uGWF]u}]Ðt&T$4$Fщ|$|$UMD$ 4$EMU럋H V MR&r'UH}} ]uudê x<x`4$,GD$D$ R(D$E4$T$>ED$4$D$ ID$B]u}]fHD$D$4$ZBՍUWVSLud >GEWB tNJ A tED$D$ D$T$4$)VBFJL[^_]ÍHMt H A uE@EvOQ+"EE܋P8U[}uE܉M܋M܋Re;PjGEFL[^_]Í&D$D$4$VHMt&E9EG@ GUFL[^_]ÍvL$D$4$xVOQt&PUE~D$4$\G@ vD$4$]\Eet&mt&PU/vR;Pt<GMFAt&Gft&UWVS,uQaN F@0ɃhAExIDEU4$XF4D$4$'F0hF4UG;G}cGhAAf+N H`HND+N@H NH0HMHF,[^_]Ít&U4$IZGU됐t&MJUWVS,u6`3 F>xhJȃBJV H MH`H N@NDHN@EF@t&0ɃtthHxO@LƆt5E䉆04$;F>,[^_]Ít&ƆM9r6@ t{UωB뵐h0BRLfF)ȃ|ω{&L$U܉MD$ |$4$?U܋M)уN fM؉D$4$?UBM؉%}U9։ f9r-@ u$U܉D$[?U܃9ƂsӉt&UWVS|u6^3 U~G+EMJ - uw99 @E܋B VBDUR T$ U܉D$4$T$*Hi&ủ։EF @ D$ D$ Ut$T$M̉ $O^EH9V Ƌx 9uù KD$4$ |[^_]Í sۃ uċB H ED$ ED$D$T$4$HSuh4$ZTF4D$4$K#F0F4UPD$JT$L$ 4$D$X@ @u(,t&׉4$SF4D$4$"F0F4B$NAÈt(EtEt4$zN U)ȃ9tz?<F 4$4F|[^_]Ít&4$U RUB+fGD$|$4$E?Ewt&F+E9_MEm؃4݃<ER L$T$$M3MMt&HMMI 9MMt(+MʉP UEP MP 9UŨP EEEm؃4݃<ED$M $U@MEMHEH U<}vEűx fD$4$|Rttx@ 9x{|$4$Jj&D$\KT$ 4$D$evT$4$hUJ@GB RUKt&T$4$ MQQE&x"ED$ "D$T$4$T}tFDN UFDEfL$ E4$D$D$UM6MUEvt&KD$ D$D$4$!4$D$.@ x&űz vz<xgR(҉Ut]B @9wEKD$4$D$H lKD$4$dKD$4$M4$7D$D$ NjE|$4$D$.lI|$D$4$Nu̍8ID$4$kJxD$$3C&U8uu]}Sݓ N>AUˆUt&tu1}u>At& J   t\ 7tut&}tm}uF>@]u}]Ít&@ y utD$PT$4$_@u&1}uGWF뒍vT$U܉4$U܋J6F>[t&@$#1둍&B  t&DvF>t&GWFB @&'UWVS\uQӑ E䋖h1JzGJWN U؋G`G F@FDGFGEhO@ƆG1t_E4$-hh0GtW,҉QU0G8\[^_]f G@<qM؃M܋F0;F89E9E4$)-hh0GtO,ɉJU0M܍4L9MrD$ID$4$+HfM؃9MGvxjEB VLBFLU؉BF0;F4wU؋BMԉ4$D$MԉM&t}U؃9Un}܉׉u 9@ u$UԉD$0UƂЋF)ȃrMfM0D$4$9X@ @4$D$lXW$@ PG(@ @@ +BB G(RP G(@fE+E؋N0;N8QU؃9UcE܉}ؐt&;Et @ F0N,F0:<FLt@9UsƋ}VLBFLEF0;F4UMԉ4$T$!/U؉BE4$D$\MԉMt&U؋JA t'D$pL$4$m;F0N,F0U؋RU؋BFLM܅MW@E܉EHD$4$v4$)hh0GtW,҉QU0ID$4$t&RD$4$UP D$ 4$EG(UԉD$4$T$z(G(`G(HG4W(@ fEB E؉PMUvG@<EN0);N8|U؃9U}܉+t&F0V,F0 FLt@9}rrButljT$4$-Ս&}܉+V L$MD$ UԉL$4$,Uԍ N V}rM0D$4$ jM0D$4$ X@ @4$D$ XW$@ PG(@ @@ +BB G(RP G(@fT$Mԉ4$,MԉV&X@ @4$D$, XW$@ PW(B @ B +AA W(@B G(@fMԉ4$YMNt&Mԉ4$AMvU}؉4$&hh0GtO,ɉJM0E%LB uLD$JD$4$ D$4$Ws4$Z&hh0Gt,yM0E؋PLB t9ʍt#LD$ID$4$H eD$4$RD$4$U D$ 4$AG(UԉD$4$T$$G(`G(HG4W(@ HT$4$M0 D$ 4$`AG(MԉD$4$L$Z$G(`G(HG4W(@ U0D$4$WX@ @4$D$XW$@ PW(B @ B +AA W(@B G(@U0D$4$Y^X@ @4$D$<XO$@ HO(A @A +BB O(@A G(@HT$4$MD$ 4$@G(MԉD$4$L$ #G(`G(HG4W(@ PL$4$UD$ 4$?G(UԉD$4$T$"G(`G(HG4O(@ $&'UWVS$U؍ N U؉Mԉ4$.MԋUS&U؉Mԉ4$U؋MԋRUzUuu]#C hVƆ`AIDF F0;F4~ 4$V]u]ÍU(uu]}Bí >tCPu#t^Pt(F>5&tRwunVBf%f=t7>B]u}]Ðt&t# 뒍čvD$4$8;nf@ 80^fU(uu]}Á >t@Pu tKHt"F>@tRwuVF>]u}]Ít&t 륍vD$4$p:둍&@ 80y&U(uu]}A >tcPu;tf@uHVBf%f=t>B]u}]Ðt&tRwʅt@ 80뷍vF>ō&t Ѓ뇍vD$4$9nfy&UWVS\u&@# >}tCPPtFDPUċ~  UăPFD4$6FDF 9EFPt0tt4$H 4$ENDQVDQQNDy+Q~DyNDE~ tMu\[^_]ÐNR%:@ 80F@H F T$4$L$McMA @F)rf4$60D$4$bFDF `VBusXR }F>@\[^_]Ðt&t[ ?4$U U4$T$D$EEfJ V덐t&D$4$7t&|$|$D$ 4$MqMvL$4$(&Mt&UVSu=Ä} hƆBRDF F0;F4(VFD;F$} D$4$F[^]Ð4$ ΍&'UWVS}=} G7EPM@EԋW$EUA @tEȋUB@B uȃ t< vBB%= t3,<$D$D$/ļ[^_]%=t7B @EJ BE@t < Euԉtv?EƇB t`@$Eԁ`ƇXuEEEEu̍uutp'p0ETpppFEԋN=JE%=mE}tSp\ED$M̉L$ET$|$ t$D$p $MԉUQUEEЍD EEH EMMԉT$D$ D$D$|$ML$ Eĉt$D$p $MԉUQUȅҋUEB t p`@$u}Dt&E@ AEEȋ@ EЋEE@ tp`@$EEЅt;E;F3}uEu'F vu}<B 2EMԅERB% =7@Ez EEE̅wMMMFEtL$|$p $Ur#UEЋF@M̉MNJp'EEẺẺ%=M&MAuOXB b G)t$t$D$ <$UU&Q GfD$ MT$L$p$UUfEt&D$ "ML$EȉD$p $U6UEMEEfpPMp;O$G7ļ[^_]ÍMԅ Eptulj0bEĀ}EE tF40@ȉEȉ)ȉEԋE+E9EԉEs Et"D$EЉ4$D$UMMUu}~%ED$Eȉ4$D$UM%MUu)ΉpEtƇqAB%DB}t ƇB@ +t;t2T$D$D$D$ tD$<$U5U}tJ E;G$nD$<$]t& $UyU9EȉEt'D$ EȉD$ML$p$ZUpD$E $D$UUMA @EE@ EEu&E1E@ WEJET$D$ BD$<$U3UuԁNƇX:L$<$Qp@LD$<$ļ[^_]Ðt&E`t&T$D$<$UUBD$ "ML$ED$p $U%3UEEXfptB 6`uȋEȾ @$t$ EĉL$<$)ȉD$UM0ED$D$<$u0uЋUMủȉUtE}űut&MEĉt$)D$ ED$M $UUuf߉t$D$E$UD$ t$MȉL$u4$bUB4pEE}E̋ D$D$ ED$1;uĉ|$D$ET$t$D$ E$UQUM9MgB tz89t)ƋE47)ȍ MB4}Et MA D$Eĉt$)D$ EȉD$M $UjUB4pED$D$ EЉD$MȉL$E$U,U1}uċU}tB t<`@$u0D$E+EĉD$ MĉL$uȉ<$t$UUsEE+EĉD$ uĉt$E<$D$UUMa߉L$D$<$UD$ ut$Eȉ<$D$kU q tB B $U(U uȋF B @A @ A 1F t`@$E@ EtƇ7FEȉ<$UM.FuԉD$<$t$UB%_DBMu}t B}tƇB @+t5t,D$D$D$ tD$T$<$.E;G$} D$<$UȋGD$ML$p$U)U7D$ E+EĉD$Mĉ<$L$U-,UE()D$ D$t$u4$U,UET$<$UUB +AbB )}PLD$<$EЋhuԋFE;FOFhh@vE@upủp upEuԈFENFEȉVFUĉN$V MF,N(tfF0D$,D$<$tBXMЋG@$pPpE;G$,T$<$z @ }tU}]EF4xωE9D$ D$E҉L$T$D$U|$t$T$ E$ỦMRMt~E9EmF4ʉ)Et*;}tD$|$Eԉ$UMMUEEԋERD$EЉD$Eԉ$UMW EEԋMU%Mԉ}ċU9Mċ}t/E2+J +END$uĉt$Eԉ$UIUEtƇ<$UMqfMAMȉD$<$L$MU%<$UM&uԉFMU}uvEtQuȉT$<$)Ɖt$UED$EЉ4$D$kU7T$<$U7UMȉT$<$L$U2Uou+uEԉu+uԉL$D$4$UHt$U<$T$EU,D$MЉL$uȉ4$U'U(uu]}+Ík >Pʃ trPt)D$4$@ @u9F]u}]ÍvJtʃJ`@ @tljD$4$빍 w,4$D$D$뒍v'UWVS}*ðj G)Ѓhpp<TN$Et%=&I MЋF4EH M[F0EMEA @EI uF@;EEЋẼxu @uԉ<$t$UȉMuЉẺ<$D$MċUȋuԋF L$$U$UȅD$t$<$UȍBJGČ[^_]ÐF8;F<t&BJGČ[^_]fbL<$D$Č[^_]ÍvT$T$D$ <$ SG@N8;N<~EEԅE@ N8 M̋E̅VM̋IMCEԋM%AM9dt9E)uЋE̋@L$<$UUt&F(MЋH Mt&ED$ "D$E<$D$U&Uȉt&F8ME9dKEfM A;EuMA$MF8I F8EfEԉ<$D$UB UMЋ Mԃyu AHN8D$<$UMЉEԉ<$D$pUȁ~8~<F8F<}t&D$ t$D$<$UȉM~UȋM&AF8D$ D$ML$<$Ux UȅtMEvF8F8D$ D$ED$fE<$D$U"UEfN0ɉMtyL$<$UaUD$ <$UEԉF0A(yD$D$D$ yD$D$<$$UȋEԋE@A$EԋF8AMԋ@ M5FHN8D$MЋ<$D$UUAMԋ A$<$D$UU낋uЍDJD$<$t&'UWVSu%e 9QMF@ uxHEuHG% = UEB< tWEMQFČ[^_]Ív4$UU F&HE닍vEIȃE1ɋEЉL$T$D$D$ D$D$D$ |$4$UỦ@E!EԅҋUEԅwMԍ 9MaNMIȃ`dU̅tpE}UЃWFČ[^_]Ít&@ G @Et&E̹vMԅMEԋEЋMA tL$4$Est)T$D$E4$UMUMKT$D$ D$D$D$D$D$ |$4$UMFUEM+EFHEt&}4$UEԉD$D$ 4$EԋA(y|$4$+D$D$D$ yD$Mԉlj4$L$ |$4$2}ԋUBP$@ EUzF|$4$D$vT$D$P4$UM@@ @E:D$ D$Eĉ4$D$UMUM%D$ D$Eĉ4$D$YUMeUfB tJ @ Lt EЀx EąG HMG EĉMG t߉}ЉL$Eĉ4$D$UMЉL$ D$U4$T$}ԋ?}t&D$MЉ4$L$}ԋ?}|EԉT$|$4$D$ %UԋUXED$ "D$|$4$UMUE>UBD$MЉ4$L$}ԋ?}T$4$t4$D$MUUuu]sp_ VD;VHVDt +F F]u]Í&4$LVDӍt&'UWVSu_ F>PŨ@MЋ8t z 1HEԀȋM%Eȃt)EtEtU4$\UEԅ B  AE`}UD$4$'UsxP>gT$D$ 84$D$UAP NU&R R t&T$UD$q4$] UE;FD;FHFDy+N F)M̃A0>4$X}ԍqLD$4$|$4$Mԋ>u49EtD$ED$ 4$D$UB @MЉF>Ĭ[^_]Ít&|$|$UD$ 4$UJvMԅZ}MЋAtM} EЉUD$4$D$UMЋUIM6fT$4$T&%E}*MЋ@ Eu A y}oEEEE̍NXEMJELUMEM}ċẺUL$ |$D$4$Z UM@Qu+Ɔ@(MHQ }G @F)ЃM̍BEJ}E@ U} MuDUԅu=E̋JB )ȃPv+;PB ỦD$B $M̉A f}T$T$D$ 4$a|$4$H?&H}̋ }MGuω֐t&Pv0Pv(PЀ v D$E$".uuM̋JB )ȃRD$P4$V4$D$UEvD$,4$M̋UD$T$ @+ED$EA 4$D$[}̋MG B19sET$ D$,4$D$$UD$P4$4$D$EUEEEE&}tREԅuKM̋xu?}@Q u44A<fuEĉU4$D$UMĉU4$L$j}U@Q84$D$UED$׋8U4$D$U&UMԅuK}}ЋO }Љ%_G@EЍyA@Q+ƆUD$D$D$ tD$T$4$4@ME̋@ E& 8EЉUD$ D$D$4$^MЋUIM A(;T$4$4$D$,vU4$9FDUqfEЉUD$4$D$bU}D$D$D$ tD$|$4$U&EЋHtu3 t%MЉUD$ D$L$4$RUMЋ@M̉EE:t&MЋA uL$U4$TMЋUAXfAQt5A(8A @PUD$4$U{8U4$D$UED$84$D$BUt@QuW&UD$4$9Ut6}F@T$%D$ 84$D$Eԅ}UЋB MЉ_QK@Vt&J }̉L$G $G UD$PL$4$ UhȉM 2% ='E̋@ LEMEO 8:M}̋hG EvM}Uu$L$|$U}t&WT$U4$D$NUE5&@ @L$4$EЋPUЉ4$T$D$T$4$MЋARUUL$T$$yD$4$D$ dJD$;A f@v}׋UmD$8U4$D$sUED$4$xU*@zLxD$JUL$ D$D$4$Uv`QƇD$$D$ D$D$D$D$D$ ẺD$8U4$D$8A ҋUMD$ L$U4$D$8U@ @ @@EUL$4$JU@ @EЉUM4$D$MU2MЋAU|$4$GUUD$|$4$pOUD$4$U[L$4$EU@ &'UWVSuP F>EHHRMЃMEMԉMN$E@MEĉ>MA P@EA EE EEUEEJxEƆE@ t`@$uJƆXbƆXE@@ R@0҉UB@E̋ŰB ;EMA %E,ŰREĺEEEHE+EMEEMȉM1ɅM(M̋A48MHE̋@)MȉȋMA 9E E9E J҉MEtEԉEfM̋Qt.M1A t`@$8ŰML$ UT$MĉL$UT$ML$UT$ MȉL$Ủ4$T$PWM0E@ tPH}ŰB tƆ}OE̋M@ɉE1҃}>!‹E F)9F0;F89UUuЉ&EE9EUЃ$UJ4t΋Itƅ)UUȋU+U9L$ UȉD$T$EЉ$MAUċMB mUЋ`@$ZL$Mȉ$L$?H EE9E6vuЋUUB!tmMĀy"@D$gL$4$M̋A48tI@B A4M̉tAt;Aib ŰB4tMQE;PtE>EMUU"EM;N$}L$4$v}VGWFļ[^_]@urXA 8uEċF) |$|$D$ 4$UUMA EƆE@ @vH FEĉ>MA ED$ "D$Mĉ4$L$U UE4$Ui UEFHMļ[^_]ÍB4EċH‹@t{T$D$g4$H xPE̋@EEE̋@4HEE B  UċJ1E!UċJEEEu 'M,fuЍJD$4$7ļ[^_]ËM̋A A9t&L$ |$|$4$UMMUNjF0;F8^L$4$UeUGE\ŰD$ML$UT$MȉL$ UĉT$M̉4$L$PEŰB 'ut EMA }vt U B tƆM0E@ tPHŰBtB8$M̋AM̉QA8}EA8U)‹A4A 8AD$Uȉ4$T$M̉‹A4+UPUẺPB@EGEԋWU܉@ P B }D$ L$҃T$D$4$NV>B@Ou UB D$ D$E܉4$D$MU܋MB @uE܉GFl[^_]A t Q B `D$4$4$D$M MĉNjA<nfu uEGu }tA \$E܉4$D$eUB @EԋU܉Fl[^_]Ðt&R FE܍GEԋGp}EEREUU8UeU9UU+UU}X}UډT$U܉4$T$E@ @E܋UԉUԋF&Q fBt&F@EwQu0t+u/L$D$4$M3MċGQP RE҉UډUEvGT$4$Mwt&T$4$+&|$4$M-ML$4$]E&RE҉URډUEDUԋU+UЉUbu>D$|$4$M GM.REU&U1ɉMUm\$U܉4$T$E@ @ D$4$&UUЉUvEЉD$U܉4$T$莺E@ @뫍vUWVSLu' NA@Px@ t H A Eԉ8HρuXN)уMԍPH4$84$zL[^_]Íy NF)~7FxxNHWF A 8taF]u}]Ð|$|$D$ 4$ĺ뭍t&HWFU4$D$衜GU먐t&UL$4$%U@ 눐U(uu]}í Vzx0N)~VxBtqF>]u}]ÍN)~VxBtlD$4$褝4$D$8D$ D$D$4$ܹVxBuR FD$ D$D$4$謹V덍vR F뉐UEWUVu V~UVFL09s'&P9щ@w)A|G^_]É'UWV0UUEEtdyq<99wF9v9FUT$G4 $MD$M‰W4>G=uW,1t $MT$IMG,FGED$ BPD$B $UMD$UBMB E؋};xE}؉D$ BP $UMD$|$袘UB M>GQ@ED$G< $MD$M1҅ALt@QLW<>UT$GD $MD$ÐM1҅ALt@QLWD>ED$GL $MD$蒐M1҅ALt@QLWL>W81t $MT$MG8>1W@t $MT$MG@>1WHt $MT$ҽMGHFG EP҉U@ 1҉UE؋E؉Em؃4݃<aU؉MD$$蠫ME؉D$ EЉD$ $D$mU؋V PMG @E1҉uȉ։}ĉωEmUMЉT$1<$D$D1҅GLt@WLE؉0UԃuËỦuȋ}čTU؋z +zoE؉U1҉M؋M܃9uM؋FG G% EȋUԋP GM%ЃD$趴1҉E؉F MuЉ։M EЋ@ E؋B < 1t)EL$M̉UD$ 1} $D$UM؃9}9w sB ׋uЋMR @ ЉE܋V @ ЉE؁NE܋UT$ $MEԉD$U؉E܋@ B E܋MP1t#ED$ G $T$D$MMU؉B}܋GU $MD$T$`MALM@ALO@AL}؉GE܋P1t} $MT$|$TMU؉B}n}t$ $MD$蹵FMfF FhFRPFSBEt'E $UMD$E܉D$UBMBEE $UMD$E܉D$:MALUEt @ALEԋEԉBbȉMM+URU܋UE܉M$M}4F%@=@!ED$B $UMD$蚋MALUEt @ALEԋEԉB >ED$G4 $MD$TM1҅AL@QL|D$B( $UMD$MUEUT$G< $MD$G<>EMD$GD $D$ڊGD>UMT$GL $D$輊GL>MG$/ $D$譢G$>M @BEU؉D$@0 $MD$hM1҅ALt@QLE؉P0@0`@0`JȺMgMWU؉ȉMRMEF @@ @FED$B $UMD$轉MALUEt @ALE؋E؉B EBB nr$@E1҉uȉ։}ĉωEԋUMЉT$1<$D$TU؉2mEԃЋẺuȋ}čDEED$D$ B$ $UMD$­UB$M1F FED$B $UMD$UBEMD$ $UD$蝈UUMT$G $D$F M@F!xD$$MMD$lD$ I*T$$)MD$lD$ L*T$$AL1t&'UWVS%bƅ؋E 5<>9DDžhDždHƅpDž\xDžDž0Dž >% f :%t 9Љxw9' a) t$DT$ L$4$m `ߋDD$D$$O HDD$ L$t$$qx9xxdxLtHƅ7?-W DxL`x xpExLD.8x1ƅ( ƅƅt HDžDž,ƅ71<*ƅtY%~xfx $ 01Dž,Dž8Dž(lƅƅ ƅƅ7ƅƅ.B DžƅV EL/ L1ɉ,L%r7u LLp,B6xҋV>%~.fD>f<FNPЈL1ҀL "888TPHЀ vދ8)LG9L} ~vL@ !9g}!KpE$`8pD$HDD$T$ t$$6Sfue35!\[^_]Ðt&xxt&7#!ƃɃP@ ‹@hJ ,A h0lDžƅ(Džƅ ƅƅƅi11DžDžLƅ78t TH@h9Ɖ0P 089s8H \y)Ѓ98 D89A HLy 0u5t,L~"1lf  9LuL8+080t 0t7t.L~$1lt&  9LuLt1f09uNjh} 0t 7tdOƅ7H+y x7dDžX)dDžLU։8҉!σa 8}f1҃0u81,L)ȀhG9A )ƀ0L,<fGxƅ7-vHDT$L$$(rHxhDD$$eeDOD$D$ $`@t&hlt&,zl%,xLL%,Džh7xƅp%DA@f%ftt f=DD$"$T}uD$cDNjAPfftD$ PD$D|$$hpP^bDD$ MD$|$$YLDuM|$ D$D$"$^t&@ D`ƅ@$88;U 8<$D$T$L8Svxwt&H@tf)DT$ HD$t$ $T$K8< C+xt&xHJ ƅbBxJ*A< Džƅ1҉,DžLfxTAvyЈ vL,ƅVt&,;hsh11DžDžLƅƅ7},xILqxP$x@ƅtD`@$0lDžƅ(}U 9((((">%+~s 38<$D$ t$I0lDžƅ(,xILqUXDT$ D$iD$L$4$cX.ƅpf7WhNkq`P۽8pDž7HP+t`ph1 HxODžDž lDžl7! P, 7уhA7.! PDžDžL7GDž ,<$D$L$RhbD$HDL$$fHxU)T$DD$ t$$s h,DD$ L$T$$rD$‰D$D$z7B ɋ,@ƅh>)/u =1hDD$D$ "$D$bt,pX18fƒuLpƄl0mL8ƒ0u쀽008t&ƒ0uoHDD$L$$6(70lDžƅ(ƅtHP`1) x %\<$D$D$O\~-~pPHD$ t$D$D$WhLƅ ,<u9h-lt V4PDž DžLA0(LD)PDžL90t Džh1G~P D$HDt$$JF SPhۭ8`$D$Dž`X؋`=q iL0bKlP0(B }@\J B tD`ƅ@$tƅrPB @dB ƅB PD`@$-DxLx/PDžLm0lƅ(pqEuԈEuuELkD8,3P`x@ x@huDžLlDž DžLpx;PPDdT$D$ "D$ $mDD$ MD$|$ $9ƅl-Dž DžLD8,!XD$ DT$D$it$$+UXMD$DD$D$ |$$:DD$t$$ P[8($&eD<4$^D8,E 9,Dž11`.Dۭ8D$D$ ,|$D$< $D$bP (۽8Hfx\D$DT$D$ "$Uk\0DždƅE 9(F aPzDžDžL7>@ U۽8} D$ HDL$4$D$OlaDžh,aA @hq ,A D`@$t;hƅh9 +,,ɍu((@ I@1)"U 9(DT$$'KDD$ $D$w+B @\R ƅE։4$,D$ T$D$vAƅ+,hDD$$D$]~,rE 9,tW,ɍu((@ ?@`ƅ1DžtLU 9*~!T0(w0(`09E ~ދ(>D $JD $‰D$ dD$D$0B tR@dB ƅB tD`@$ $i_DdT$D$ "D$ $zf늋T$DD$$Qx\D$DD$ "T$$!fƅZD$DD$$e[xLD$D$(`xD$$_TnyMD$D$(`e\U 9(DD$D$ $ YDD$$D$X$SlaYDt$$7_hDD$D$ "$D$c,L$4$J$;vDXXD$ D$T$ $`XhDD$$#)ƅ U8]ycv }}uu <$$@UD$D$D$T$|$D$ Et$$>LF @tEt$$K]u}]UES$EED$ Eb D$E D$E$I$[]fUSbû $$2UUUT$ U T$U$T$H$[]Ðt&U(]ibf uu4$?Ut$D$D$D$T$D$ E D$E$1K]u]Ít&'UES$EED$ Ea D$E D$E$K$[]fUX]aö uƋE}UЉ4$E/DUЅ҉MԍED$ T$EЈMED$|$4$[W EЀzv5}}!}t&t^]u}]Í&E^W RD$D$D$@UD$ D$|$4$S*눐t&MD$D$D$D$ D$|$4$*gt&D$4$H‹G $MD$ D$@D$ A T$UЉ4$D$RF|$4$D$ MD$+UЉ4$T$i G $E|$4$D$ MD$q+D$4$Eu1@0tD$ D$D$4$BU D$ T$4$D$oBB HtB L$ D$|$4$>MD$ "D$T$4$'^MÍUuU }NjE]%_" UEt.uBFfE%=cvKF&1ҋ]Ћu}]Í&t䍇9EtًM;t뢍t&Wt&F t4@ tM9H uMD$ D$D$<$Zwt&VG_}D$D$ D$D$$$G"}|F D$D$ D$D$1҉$$Ef%f=f E UfVBf%ffMuM u]u}]$t&FEdvF@UFV G;E5<$?D$ <$rT$D$U9D$FD$D$ F t&9wVU܋NMBf%Pf&f=E܋PBf%fqBWŰEZ#UЋB PCM؅tEHffEf%f=gB}MAQ f%f~f %D$D$ D$T$ $Ut&Ff@P t €uPfvFEF@t@f%fEu9M1ҋE}ԈM܉!@t @Pffftft׍&čFPffkPPffPG}MB}}M& 9uE}EVG}tD$FD$ UF WM9 pB u90ut&}ԋp W0HɉMԉM%EĀxEԅEMfA}Ef%f=vEԅJ@ }Uԋ@D$D$ D$U܋B $@D$UЉV G@ D$ VD$<$T$+:gU9\s&B@EERGE*}@ PE$=zEEE}v D$EɃ%T$D$ t$ $Uf~)fM $ΆD$D$ D$u܋F D$$%UbMԅɉMMċA f@!B H-A #D$ FL$<$D$U8UȅM9:MEVM E<}D$T$ V G}E&t BE}E1~vE܋W@ ŰE }D$uԉ<$t$`IS@ P@ M̋ MJ ɉMs@=E`9UQIU;uE M؈EvM؋ m9MIuEЉUԈE}D$D$ EԉD$U܋B M؋E̋I EM܋A P@aB(Ef%f=7Eԅ@ }Mԋ@D$ D$T$<$6U9M؋IMvfuM؋GQ E؋M̋@ M7EEWu؋GV EEE1WM؋GQ Eu؋GV E@}D$Eԉ<$D$U,GU uwM؋A M̋}uM؋A M̋ED$ D$D$D$D$D$ EԉT$<$D$KU9PsvM؋A M̋E`M؋A M̋E)vUWVSG T$MT$D$ 4$D$)D$/<[^_]Í&UD$ "D$|$4$OU롍t&T$4$3wt&D$D$냐&UWVSu EP͐ }eU1҅EV t>E@t@F Me3 mĬ[^_]Ð th`tWt&7t@ED$)$KtUt$$6@ftwvF0 xX xEMx "aV T$ D$$xEMx:v:uv?HT$MMUMML$@$E'xUE)‹J9H N ET$ $xtD$;=xt+V tPND4vF0*@D$N;M $tD$D$ @D$D$@Ct?K~ctzE9x F EEPN@U|$L$$*}V B YjB%=PET$xD$$"$Ek*xEB THA -@ EA MDH|HMD N uELvEL$xt$$M̋PMԅu.t"U`L$$D$u P UԉPMEL$$G}tD$E$ Č[^_]Ðt&T]t&F `FEUMD$Vt$$.UMEt$$9MUvUD$t$$W}IvW4 t?F_V&Ut$$>f'&FWȉMЃ HMЃ сM L}_VG 1ҋMALt @EPLV U VG%bM|$ $9KE+;.D$D$D$ tD$t$$.>t&W []GEE t EŨ} FU;MM̋Et$L$$6t&wD$Mt$ $ FW[t&GD$Ut$$FW+t&ED$t$$FWt&GE%= Eԃ EL$<$>v} @vz_DNE% = %=DE&F Et9EЃx t.t@)EԋEԉNF MԉU $4U}HMԋH G @G F H MԋHN tF Fҋ@A}F Fs%=MԋEԋ@EЃEԋ9A MЉL$G D$F U$*MЉHN @UX&F3 ‰VGED$V|$$)<P T$U@D$ VD$t$D$$:NG%;t&HMG Eԋ9H F L$MԉU$L$EAFU%_D ЉFG%t&0_N%3 Ft @A t/G%Zt&_VG%3t&} %N UЉŨz t!t +JfN $52M̋E@ @FEt$D$$MMQƅ Bf%f=iD$ MD$Et$$r0Ut$$}8(t&fMD$ $5PD$ED$ $G%t&с _V|Ut$$7hft&\uMD$t$ $V%_FDFRPGNED$t$$4V%_FtUt$$7F"FN `F=MD$t$ $떍FU<D$fvO AUD$dvEHfE7EUM|$$GUME%9ЉEE%=Ẽ }  fvG F @ A @AfG_OG @ @gEL$Ut$$&MUXt&Et$$e5G%2t&MEUD$ "D$ $|$5MUEMUt$ $5UMUt$ $4NU9ʃ %GvD$ EUD$|$$t$}U% GG%m&MԋEUt$L$$s%UPT$ $ED$t$$3Ut$$/4FT$ $;g9E$D$ [6&EU|$$3UEԋ@ }E@Et@f%f%^EUD$ D$|$$[9V tMEt$ $E@ D$E$(F G% ]V EEJM|V EÈJMfV EE@BEPV JMЋ@HMhM@:hEH:iHE:HMAM:AEE V EEBEvU8}} ]0p uutdtvt\@@D$ED$ |$4$JE]u}]Í1t&Y\몍&D$4$tԍPD$D$4$~ 1룍&'U(uu]} /o GGE D$ |$4$D$s F0;F8|D$4$F0V,F0GM% G`B@:t$Z<[^_]Ë0^t&}&Ht |$4$}uG%@=@o@4$D$YfB(@E4$(9Et)@E4$C9EtD$|$4$P$t @Q@s@$@8$S@@$F@H$9|$4$X&9\,|$4$uv9|$4$D|$4$GIt&Bʁ(LD<[^_]ÃobB Gt(E@ "MԋP A D D$lQD$4$v@4$D$g}sf<$要Gs$~ $GM% G P u1@t*t"@ tJ P Lt D$4$X|$4$@t D$4$GG @<$4$EVDEfD$D$ 4$‹hBhP dždž\FB$@@4$D$i @$@$ Ttx t*4$4DT$$D$4$r@ @t̋@ u1v'U(uu ]}}Ê^ F t&9th9t^9tT;tLt$<$4Nu&FFu]u}]ÍF U8uu ]] }}tdFumFuSuuJt*99t{9tq;tiD$<$u-t&]u}]ÍvFut$<$؍Q|$t$ D$D$<$Z봍t&F Uuu ]E\ NV tOfF zuEtT$$]u]Í&T$$]u]f4$}fF 뿐&UWVS,EVS\ p @9v2t&ȃ 9>tGu_G Ou.%@GtEU|$$6U딐t&EU|$$ OU븍EUD$$,1[^_]ËUD$QD$$t&'UWVSE 63[ x8wt{ 7taF ;EuFt@tt$U T$M $ЋFtV gtN ~3$WF u74$I7uM pt31[^_]ÐtSwtF ftɋFD$U$fQсp ʋM Q@1[^_]ÍvD$E$uit&USUE Z 9t9tHD$$1[] UE ]uY P t' t1A t+HHD$E$]u]ÍJtA uȋJtA uH tRtB u뿍&rtF t&u֍U(uu ]E}  Y V B t,Nρt,NF T$$]u}]Í4$yfF UWVSD$EUȉD$$EʉMsMȉ;}vaUʉŰUЋ+BMȉD$EET$Uԉ$UsMȉ‹EPMЋUMЋUAUЋBỦD$D$Eԉ$dUԋEMȉT$T$U$"Mȉ‹EjMLRD$ $fUWVS\uEԋ}U܋B ×K t MԋU E]EEM؉E;uaU)VE t&t 9w9r`+EE}uE}uE\[^_]À}y;Ei+u t$ UT$ML$E$EԋU3E\[^_]É+EE}t밋EԀ]UP M؋M9MJMċM9MM9MrpE9Eb9O}ċE ERU EE+EĉD$E+Eĉ$E3}EEU]E҈UE;}f}؋@ t|U U+E؉UD$E+E؉$EL3}EE떋RU@ U )UUD$E)$E 3EESR UPM M9ΉMM+MUt9w9s+UU}؉URUJ MM MR U MM)L$E)$E_2EED$wM܉L$Eԉ$6U UlUԁ]T$Uԉ$EMƁ]U܉T$ẺD$ M䍃RD$L$Eԉ$Uhuu ]# H }}t(F t6@EN uNUt]u}]Í&ED$ED$ "t$$EtUẺD$EEȉ$EUЉT$ L$MED$D$UEԉMkD$EЋỦD$T$L$D$ Eȉ$Es+Eԉ5'U1҉Xuu ]F }}tzF @EN ]t_FEEEL$<$ȉD$EuMЅ'EЉP ]Ћu}]ÐEL$<$ȉD$׍&ED$ "D$t$<$Vt$<$똉MD$wt$<$M̅EEЋ@ Etu]UUEL$<$UȉD$U;E1]ẺT$<$Ƈ]Ẻt$<$D$ EԉD$RD$FEUD$D$D$D$ wD$t$<$HỦEUX}} ]UuuD Gt;`Mԍ$9MtBtgttfvfvu&t}~fvVSt$D$$@tډ$Ut$|$Uttt&]u}]Ív`^t&<xCv<wMEt$ |$L$MD$H$L$D$ @ 뎍<,$D$D$vH gPEMD$t$ D$EL$|$$D$O8MD$Et$ |$L$MD$$L$[ʋ‹뺋벋h몋뢋1MD$Et$ |$L$MD$$L$t~JLfbf8@5* t$dhMEt$ |$L$MD$$L$D$aF;&UH}} ]upmA G< ED$ $`ƉD$ED$D$D$ <|$$P;P |ET$t$$|PN PE]u}]Í&ED$<|$$=Lp딍t&E|$$0…uEUD$<|$$Ut5p@@EUD$<|$$U2EUD$ $`ƃ@U2fU8uu ]}}? F<ta„uA%=tRF t$<$D$E@NE<$D$ʿ]u}]Í&V B떐D$ <$$tƍrND$D$ <$f몍VND$<$rUWVS MRURUG<_WM΀Wt|$D$4$4ED$|$4$D$ ED$OUB DP H.Eh@P@:huB:i7|$4$W%_G̀G`UB 4$D$MG A Pсt-`L$4$D$PP}Ut4$D$<[^_]ËH tG }W $G @ @G<7D$ |$4$VGfPP\B:AB:AEfL$4$(+D$D$D$ tD$|$4$:|$4$GRt&@4$D$mMA @A @ G tP u HEt&|$4$PWt&4$D$kvW +PgW qt&'UHuu ]}}}z; F<~ @ 9EvN}IUuM$U~U܉EN DžɉMHɉM~ P ]u}]Í&tT$<$UU܉Nj~ P ȍ<$D$t$~ @ N&D$t$<$HFt&<$t$~ ‰E@ 9EXM+JUM JUt&9ʉw*D$MEԉU܉ $D$mU &ҍt&xD$$'UXuu ]}}ú9 F% =t!1F @u]u}]Ít&F v`@$uӋE@ tʋ<$EJO4L$<$;O0O4<$ODM;OHODErU+O  O) UHPG)ȃAqD$D$<$Q@ tnRU@ EԋF 9Et,U9Q MԉT$$L$UPG0;G4~<$@<$F N t&UD$ "T$D$<$E뀉L$L$D$ <$"D$ D$D$<$O)D$ D$D$<$T$t$<$AUF <$WDEЉUxU8}}]U uÊ7 tnFFu]u}]ÉUD$t$<$U9P s͉T$t$<$fU#U됍&UWVSN M4D$D$D$ tD$t$$PK UXE]FC uu }V@N )ωMMI ɉM;E2 9}=FuSP u8PN ЃMET$UL$$V @@F F%F)x )x~ x]u}]Ðt&MIMAfMED$t$ $芸E<UED$t$$RVEvD$EU؉M܉t$$KF M܋U؉ED$dTUԋuԉD$EUt$ T$$V uD$ TD$ET$ 2L$T$$t&UWVSLu VS jF  E t$D$ ED$U$ F%DF}E}9v.O9J )F T$D$$蕦xE+t SU+UUAT9Q V UԋME}ԍ9s9Lj rED$UT$}}<$MHF @L[^_]ÍvRU v V ME< EЋH9M+MЉ)9 E~!L$EЉ<$D$ỦMMȋU)׉xF @kt$E$L[^_]Í&T$t$E$Eԋ@D$D$D$ tD$t$$|&L$t$M $E!t&UT$ML$EF $@F @?t&uWMɐt4}+}t$|$U$ML$E<$D$UЉt$T$M $萔M+MωM)ljT$<$D$|$t$E$[}UT$ML$EЉ$wvED$E<$D$ỦMVM}UND$U$3TD$E$fUHuu ]}}ê V <$UJUEU9P T$|$F $UPF%DFE+t9t0D$D$D$ tD$t$$t&]u}]ÍvED$t$$%V5%_FtUt$$뫍vET$Ut$$UfED$t$$ͲU(]EFC uu }}D$t$<$F @t t$<$藽]u}]Í&'UHuu ]M}} F 2~G9B V $U|$L$U:xF%DFE+t<t3D$D$D$ tD$t$$&]u}]ÍvEMD$t$$RM3F_VtEt$$C륐t&D$EMt$$&M EMD$t$$MTD$E$'UH]UVS T$UeE1E؉uu }}D$$$Uԉt$<$)‰D$T$ 7Ee3u ]u}]-|'U(]E uu }}D$t$<$9F @t t$<$]u}]Í&'U(]Efc uu }}D$t$<$IU<$T$ UD$T$_]u}]Ít&U(uu]} tQGGE|$4$D$ E D$]u}]Ðt&q볍'UHuu ]sp }}0F\VL LAAL$<$UԉMD$SFMЋUԋQ ~x@ y D AvD2t D)y]u}]fT$UԉD$<$vUD2tρI Ɛt&EET$<$D$~<$ƋEt$D$H lj4$끋t^@@OF<$D$5t&UUԉt&먍&U8]æ ҉uƋE}u1]u}]ÍBuz tۋzЋJ ~ɍU<u Bft:9Bu;Eft;tBxt,D$4$=4$D$ud@4$D$ޯR'UWVS |$輶<$%t$|$$%?f1\Ű@ uMĉL$P$D$ỦPMĉL$T$D$ủTUEĉD$X4$D$迏XuMĉL$\D$Ẻ$蚏Ủ\MĉL$`$D$xủ`EċUD$d4$D$S1҅FLt @M̋QLủdUEĉD$h4$D$huMĉL$lD$Ẻ$ỦlMĉL$p$D$ԎủpUEĉD$t4$D$诎tuMĉL$xD$Ẻ$芎ỦxMĉL$|$D$hủ|UEĉD$4$D$CuMĉL$D$Ẻ$ỦMĉL$$D$ủEċUD$T4$D$׍1҅FLt @M̋QLủTUEĉD$X4$D$蟍XuMĉL$D$Ẻ$zỦMĉL$$D$XủEċUD$4$D$31҅FLt @M̋QLủEċUD$4$D$1҅FLt @M̋QLủEċUD$4$D$Ì1҅FLt @M̋QLủEċUD$H4$D$苌1҅FLt @M̋QLủHEċUD$4$D$S1҅FLt @M̋QLủEċUD$L4$D$1҅FLt @M̋QLủLEċUD$4$D$1҅FLt @M̋QLủEċUD$4$D$請1҅FLt @M̋QLủEċUD$4$D$s1҅FLt @M̋QLủUMĉL$4$D$/1҅FLt @űVLẺUM̋uĉt$ $D$ỦBL1҅t @M̋QLủEMT$D$4$ EċUM̉D$ $D$tu1҅FLt @E̋PLM̋\4$7sU1҅t @ MẺ4$RUM̋T$ $D$ZủUdždžMĉL$4$D$a1҅FLt @űVLẺUM̋ǁfuĉt$ $D$ỦBL1҅t @M̋QLủE҉1UЉ}m݃$1]]$赮M̉ủ‹}ԉMmEE[uL$$D$'Mű҉A1UЉ}m݃<1]]$M̉ủ‹}ԉMmEEuL$$D$舘UċMủT$4$D$艇1҅FLt @E̋PLM̉Uuĉt$ $D$QM1҅ALt @űVLẺUċMủT$4$D$1҅FLt @E̋PLM̉ǁ Uuĉt$X $D$цM̉Xu\D$ $D$蹓Ủ\1҅tP M̉QUuĉt$` $D$uM̉`uddhh,,004488<<ppEĉD$l $D$Ủlttuuxx||vv1tM̉T$ $ủU1t!űMĉD$4$L$czUƋM̅tUT$ $D$RMű((EĉD$$4$D$葄1҅FLt @M̋QLủ$U@@HHXXM1LtủT$4$ỦLM\\PPTT`1tủT$4$蔱Ủ`M^^__uĉt$$D$襃ỦBL1҅t @M̋QLủEċUD$d4$D$j1҅FLt @M̋QLủdEċUD$h4$D$21҅FLt @M̋QLủhEċUD$l4$D$1҅FLt @M̋QLủlEċUD$p4$D$‚1҅FLt @M̋QLủpEċUD$t4$D$节1҅FLt @M̋QLủtEċUD$x4$D$R1҅FLt @M̋QLủxEċUD$|4$D$1҅FLt @M̋QLủ|EċUD$4$D$1҅FLt @M̋QLủEċUD$4$D$誁1҅FLt @M̋QLủEċUD$4$D$r1҅FLt @M̋QLủEċUD$4$D$:1҅FLt @M̋QLủEċUD$4$D$1҅FLt @M̋QLủEċUD$4$D$ʀ1҅FLt @M̋QLủEċUD$4$D$蒀1҅FLt @M̋QLủEċUD$4$D$Z1҅FLt @M̋QLủEċUD$4$D$"1҅FLt @M̋QLủEċUD$4$D$1҅FLt @M̋QLủEċUD$4$D$1҅FLt @M̋QLủEċUD$<4$D$z1҅FLt @M̋QLủ<EċUD$@4$D$B1҅FLt @M̋QLủ@UXX\\PPTTDD``hhllppttdžƆƆdždž*dž*Ls D$$ELuf D$$EỦD$$EęM̉Ήt&EċUD$8M4$D$}1҅FLMt@VL9EċUD$8M4$D$^}1҅FLMt@VL9uE  u1ŰF0B0V8M̉Q8F4A4UЉ}m؃4݃< $D$ИŰr0B,x\1׉E W,UMčL$MA,U<$D$|1ɅGLUt@OLE 9w0}M1QH+Q@}Um݃<6 $]1D$$M̉A@u‹Mv@uAH)ũFHAD+EFD)HMЉ}mE 1L$M]$L$蠌uŰFBVM̉QUЉ}mE $]1D$iM̉Aủ‹N}ԉMmEF uFL$$D$EċỦD$h$D$蹔M̉huċUt$d $D$zM̉dt$ul $D$zŰdlűQ V u+F ũ@ FUB$F$B(F(MĉT$4$L$ڏF }̹*uttE̋u̱tpUXBFLFPFBTFTփXցƸ}̱ǸMċủL$4$D$yEċUD$4$D$y1҅FLt @M̋QLủU  $$((,,00MĉL$44$D$Ny1҅FLt @űVLẺ4UċMủT$84$D$y8EċUD$<4$D$x1҅FLt @M̋QLủ<EċUD$@4$D$x1҅FLt @M̋QLủ@UDDMĉL$P4$D$ux1҅FLt @űVLẺPUċMủT$L4$D$:x1҅FLt @E̋PLM̉LUuĉt$H $D$xM̉Hu\\fEĉD$ $D$wỦBL1҅t @M̋QLu1dž UB<dž$F<fT$(4$D$ʑ(uMĉL$,D$Ẻ$wỦ,MĉL$0$D$vủ0UEĉD$44$D$vdž8dž<dž@džDdž4džHMƆ4$D$ 誣duŰD$$D$BM̅Ɖt8ẺŰDtEt"PtYRE_UB tS@UF0;F4>~4$~n4$&zE,[^_]ÍU@EB uMD$4$L$谑fT$T$D$ 4$~D$ D$D$4$}V)ƒJD$ D$D$4$}-t&T$T$D$ 4$}eD$ D$D$4$|}v|$|$D$ 4$\}Nt3EEt,@ 80Et&D$4$萕Eut&Eh&4$t&GVDE8dUD$4$j&'UH]uƉ}׋R$Uj~gD$|$4$vL$MD$ uU WD$ 4$fMt ʉ]u}]Ð&U(E]VSuu }}D$ Et$<$D$bzF @t t$<$蠃]u}]Í&UHuu ]}}F r tn t`$9t:F @ ED$t$<$7eEt$<$D$YF0 @% D$t$<$hw@V%_Ftt$<$NFF]u}]D$t$<$Fvz_NNj뗍&t$<$XFzt&(V%_Ftt$<$蓗F"FAJu/_NNB&ߩNOft$<$(N7fD$t$<$VFt&D$ D$ D$t$<$ƊF ft$<$踖NIfD$ @D$F <$D$謍tIF <$D$t$<$أH4\$zf݃a\$t$<$z,<$D$D$UWVSLu 薗Ó}F ( tn t`$9@t:F @ D$t$<$EaEt$<$D$VF0 uR0tB _Vtt$<$'V"VL[^_]f…xGс_NN@L[^_]Ít$<$xUFt&@D$t$<$_F$v@tN Ѓ"1D$t$<$:sF_Vtt$<$)VV@L[^_]Ívxtс߁N t$<$ݓN&D$t$<$SFt&D$ D$ D$t$<$vhF fB<vMԉȉMfJvJvMЉEԍB< w!EԉM䍴&JЀ vMEԄEԃt&:P@0N P9wxPJЀ vԍJHJJPD$t$<$g}&كxa\$t$<$wvPJ9H PV H 9sfP9F rPJЀ v] &D$ @L$<$D$ttLF <$D$Xt$<$؃H4\$rv1L$t$<$赂PPD$t$<$gV뒍B<M6,<$D$D$:&'U8U]ƒuu ҉}}t9EUt$<$D$oU<$T$D$R]u}]ÐD$ D$t$<$pF @t̉t$<$z뾍&'U(]E&#uu }}D$ D$t$<$pF @t t$<$oz]u}]ÍUWVSAF"Ft&]u}]Í&@t J bu먍t&B땐D$t$<$^FDt& Fet&D$ D$ D$t$<$NsHt P ;V t&ED$ BD$F <$D$/v;ȃcU1ɉMԉUmN"fN AyA1҉ỦEmdt&B1҉UԉEmit&Ѓ ED$t$<$0>Ft&D$<$zV Mĉ<$ET$tEMą2N D$ @D$F <$D$ucF D$ <$E {MĄ-MV U1ɉMԉUmv'US~$$NUUUT$ U T$U$T$h$[]Ðt&U8]~Öuu}} D$ 4$D$|$]E$|$4$D$E D$ED$ED$ED$ ED$Hg]u}] U8] ~}}uu <$ZUD$D$D$T$|$D$ Et$$KF @tEt$$)f]u}]UES$EED$ E{}xD$E D$E$h$[]fUSN}K$$:MUUUT$ U T$U$T$h$[]Ðt&U(]|uu4$YUt$D$D$D$T$D$ E D$E$J]u]Ít&'UES$EED$ E{|xD$E D$E$W$[]fUSN|K$$:LUUUT$ U T$U$T$W$[]Ðt&U8}}]u{tyFFE $wXUt$<$D$D$D$D$ E T$D$H]u}]Í9닐t&UES$EED$E ;{8D$E$kC$[]É'US{ $$JU UUT$U$T$C$[]ÍUWVSL} zóuG 2P G DEOD$ D$|$4$uO@ @U܉4$E$rF4D$4$AF0F4FDE;FHFDUE+F MF+EăMċEU܉4$MD$I4$D$FMĉAEUD$B @4$D$ X@ te@EF0;F4z4$UutgL[^_]fEĉUD$ 4$D$D$YU܉EI&UD$D$4$u[U܃EF0;F4~4$Iy4$ vNDU܉MfUWVS EU Me5u1`l\Bxé t(}`T$D$<$6lB<lB}t-\ $#alF vl%_DB\ $```$9 `4HF„P B  rrlEL09J  lz \ljt$ `|$L$4$Jl!‹MщHl@;E1lN 4H/@"<DžDžPTTP1҅p`\4$U  t$<$Nt11lB 7`D$ $^\D$ |$ƉD$`$f`D$t$$u7lUP`D$ t$L$<$)Zt$<$6s\<$^`4B m / @R TDžPl`D$L$4$RlG\`t$<$[T$$D$f#DžDžTDžP1ƅp\H4$?h8}䉽tt&h\f8pt;tt <$Su+hdXXXu T$ hl`D$|$D$$;@dtct"lq9wT)։p 9t7XE\`T$ $KdPt*t%\4$R t\D$4$ll@;EG Ue3w [^_]Í&hl`T$ L$t$<$6Rt&h\`D$ D$T$ $rEX~%dk1DžX_Džd

D$ $"(9<$RWD$:L$$Vt2H P 9s"x`9w}e3=\[^_]v9:t&9H ,|$ $1gO~|$D$D$D$ tD$<$HgSD$|$$3}U4$|$EPH8r qu84$|$]Áq8@4$|$@]ÍU(uu]}gíVBf%f=it7D$a|$ 4$D$H+]u}]Í&T$4$*čv'U8]uƉ}B,g)Ѓ  tfuG%GG4$I4$D$D$EHDEHx ]u}]f tc|$4$9밍v@uxm%GG딍&y(ynA u]y$kd&uB5|&|$4$?G낍&|$4$+듐&U(uu}>4$T$UlUJЃ wF>u}]fU|$}4$7UG74$|$]ÐU(uu]}pemV>Bt3tt)4$t&FuF)~%V>]u}]Í|$|$D$ 4$E뿍UWVSEdФ8w@ 4@E}M~A @EQ UȋUB tM`B$}EEE+EȉEUB@Et#EtEt $DEE@$EEȋvMV@E‹@tt ƁB}`U%BMƁX}ċV$`}GB @E}F DžxDžtE}ċEUuȉ|@ Ezt=} t&ƀ> tt$M $]uߋExEUE Uu E Ei}ȃmtK}0;us<>  |$M $]].U)9/E}+x |+E)9}";uC1u1EUĉM;H$~xt MEĉ $YGD$D$U$OHM $D>E}E> UMBP A4|$ $t$0!F @hUċEĉrMA[^_]ÐM AEƀX}ċV$}uEXB @ET$U$E@ @E}sEȉẺD$Eȉ $D$#KEEnv}ċM9D$E $D$E tt$M $pYU9r&}G ;u< t< l< d< \< t&OUv< t < t< t< ft9< u܉)1MwA ;u'>6M̋v9 DB uD$ Mĉ$L$L$Y>Et&;u&5M̋ f9DB t;}&fv;u̐t&zU̍&< t< t< t< t < Ut&9rDt&E% ED$ Ẻt$)D$M $nYUƋB+EăEEĉ0EUĉM;H$L$$N(ExɉEn}Eċ}GEEUċu̍v9w f9s? u9sYE% EL$D$ )ȉD$M $hXMhEȋA)Ѓ~EȃmuΉUKfT$T$D$  $\<ut,3 &DB uu< t< t< t< t&t< tfJ;us@s}9}UB+E9P}Uuā Uȉ; }ȉD$L$|$ <E$h:Wh9}wuĉD$E$hn'hEMĉ9ut$D$M $VMɉt룍ccD$U$[^_]ËEuuĐt/tIu.MuD$M $h&huoD$PD$<$'GtGD;GHGDAM+Q A)~rtuċG}ĉDžxEt$}<$AD$ Mĉ$L$L$9E-1t$t$D$  $9oEDžxDžtECEl9lMITTEЀsE}}EUuEt&M1D$ D$MD$L$MȉL$M̉T$|$L$ M $hPMh1PB t ƁBMtJ8;Mt}ċE+}+Eč<9E̋B4EE% ED$ Eĉ|$)D$}<$hdShdEȋG)EȃzUĉEȃM9QMčA4HMȉr9}sAEEȋMA)t$t$D$  $hd7h뎍E% ED$ EȉL$)ȉD$M $hShE놐UĉB4x9}mMt$t$D$ <$6dhUB @}8MA+E9N1҉}ЉUm؃4݃<SMEċQ |$$T$1E}ĉ8UB7uĉ UB+E9~KE1E̍vD$ t$UT$M $8U̅tEĉT9ˍEċUMċB UB+E;EML$ Eĉ$D$D$5E|$ Mĉ$L$L$q5EI|$ Mĉ$L$L$R5EE@TE@% = UT$U$dP UdEȋBEFM;um1}D$MȉL$ }̉t$|$E$PlE% Et$D$ )D$E$JPUƋB+EăD$ Mĉ$L$L$?4EăEEĉ0}E|$D$U$'.ED$U$QD$M $+ <$>PGDEċMT$ $;UUT$<$7@ @EB @MA ftsA Eȉuămt U8tz;}ruĉ|$ Eĉ $D$D$13EuAxD$$AD$ "D$}ȉ|$E$QiU UD$T$ )‰T$E$NM‹A))t$t$D$ M $h2hƃ}tE|$D$}<$%E&'U8uu]}pQmFD>N FDF@tGtB9s#ljJF>]u}]Ít&ljJߍ&UM4$OMU룍t&UWVS\uPӐEԋVDN ẺVDVBR FEЁ`ߋE+ẼM9M}ԋD$ED$ 4$D$.UЋB% =HMB UB R T 9s$&M:Mԃ 9r}ЋG%DGŨ@UEЋ}̉GUԋF\[^_]Ív4$4NẼ9EvϋUԐ:8 9r뷍t&MЍED$ D$4$L$F.M}ЋŰGUԩ@fMЉ4$L$7R`B$}ЋW t&E̋}ԋUЉ4$D$ |$D$T${t&4$tAD$ D$`4$D$o1@%@=@tF&XB EЋx 9ωMsou ;}sX?yUD$|$$taǍG9s M0 Mǃ9r뤐}ЋuȋG MT$4$,@ KMЋuȋA ՋVUWVS+V E4$CsGD$D$4$I24$A(4$HFD뵍vU4$T$}I4$D$넍vU8uu]}K}F>@f%f=t{T$U4$(M܋Q M@}uUEԋ})ȉ144uu}MȅtLE1҉UEm؃4݃< U܋EB UT$Mĉ$L$eF<~ @EЅ3UЋM؃MA @D$4$UUtEЋM؉}Љu܃Ɖ׋D$E܉$F}Ћu5&D$PD$4$UM"/UMK@GFD;FHFD+~ 84$29FPt0tt4$!D$ncD$4$'4$zFl[^_]ÐA@ H`1B$)‰ŰU̅tEM9MM@ @EЋEЅU܋Pot&4$Uy=FDUfM܉4$L$>4$D$1 Ut&4$>UEE1҉UEԋEЉEm؃4݃<~ED$U؉<$T$MA @t=EF0;F8%EЉ}Љu܉։NjD$U܉$ u}Ћu܋Mԍ|U؉$7F>l[^_]ËM܋E܋I Mԋ+J9MFM̅MًEMԉH MJ U܋HnfU܋P UЋP&iv`tT$ D$D$D$D$@04$D$UM1UM@ `D$D$D$T$ D$@04$D$v1M@yt&D$ 4$:cU܋PUt&MEtQE1҉UEm؃4݃<yU$U/UEԉT$Uĉ$T$F<~ @ksEЋM̍TM܋A A @DU܋MHE9EE̅R ىMЉU؋E؋UEЉB MH UMЋMҍMfuMȅE1҉UEm؃4݃<pU܋EB UT$Mԉ$L$Eԉ$64.t&UEHD$M܉4$L$ErD$D$4$0_t&U܋@DEg4$:F)9E8E1҉UEm؃4݃<E̋M܋UA T$D$<$E@ @tGEF0;F83UЅt1EЉ}ĉu؉։ǍvD$M؉ $pu}ċu؋EЍ|t&EtRE1ҋH EUEm؃4݃<EЋUED$T$U$[)M܋Q @ЉEvT$E܉4$D$iU܋UPaD$D$ 4$~D$D$4$.EM܋EŰI ؅҉EЉM,Ẻ}čTMщM؉}1u؍&44uE܋u؋}ċ@ EE1҉UEm؃4݃<E̋MD$UىȉT$$M+(E܋M@ EԋE܋M܋P+MMЋM!M`T$ D$D$D$D$@04$D$M,D$4$D$-Mz|L$4$D$*D$4$UЋM܃ҋA M̉}ĉ׉u؍ƍvD$E؉$%}ċucMЉ+V |$L$ E4$D$UaU<~ T$4$cEЉ4$D$ UЉ4$T$ xD$$~'fUWVS\u683xEFDU؋V U؉FDF D$ 4$E0U9UE׍GD$4$E W9UvrD$ D$EЉ4$T$NEЋUD$ D$D$ED$D$D$ T$D$4$ 09}tbfD$ 4$E3UЄT$E܋UD$ D$D$D$D$ T$D$4$/E+EԋVF )ƒ~ZxFxxhE܉4$D$F>\[^_]ÍaD$D$ 4$UTD$ D$D$4$$댋U܉4$T$SEfUWVS,uF6CvNDNDV )Љ׍J+~ L$D$4$NF )~0xFxxN4$T$F>,[^_]Í&UD$ D$D$4$aUxFxyT$4$뢍UWVSEUMuh5euEBDI ʉUFDF UMEMĉUԋF@ @E%EE}9}EUUEt&;E}UB t"ыR UQ MLt x }E@ ‹@EJ UEB tډUЉD$L$M $ UЉT$ D$MԉL$E$9}}EMt}uF EED$ D$D$؃D$D$D$ ut$EԉD$U$F,p!ƋE̅EY9}WUB@t*Eu+EF 9EčPMHUċEUĉMAĬ[^_]ÍD$ D$D$D$D$D$ ED$UԉT$M $c+Et$ ED$UԉT$M $*]t&D$ "ML$ED$U$31Eu4$F&@E%ED$EMԉL$u4$Et&UT$D$M $Ĭ[^_]ÐMQRD$ $T$!{M $+05uNRUB@EXD$PEԉ4$D$G@tg@ p0:D$ D$t$M $h,%D$ D$t$u4$?,Uԉ4$T$.4$D$yUhuu]}0ÝpF>@@uxOM̍OUЋWMԉUJ  u7xEԍMԉQF]u}]Í&ucD$4$؍t&ED$ ED$D$4$D$&F>뗍vMA @D$T$4$+QEԍLt&ED$ D$D$D$D$D$ D$T$4$'GŰFt&Etx tF>&@ HtۋP ufED$4$D$#U 'UWVSlu.ónEFPqE4$<Eԃ>FE@@VD M܋N M܉VDV UȋU UQ  xPE܋M+EN EMFl[^_]ÐEE@@pU U܋UzW  u]xA a@M؉D$|$4$L$ )]U܋}؃UfM܋UMBUuc4$D$ l[^_]ËFvEԀEt&UԅF 9EMQPEf b4$D$l[^_]Í}܃9}U>@U؉L$D$4$T$ M5M9}X@ uD$D$4$M M멍t&}܃9}!E؍uЉΉUă@E 9}rVD$ D$MD$D$D$ L$t$D$EЉ$n$uEĉ9}sE܋M+Eȋut&ED$ D$ED$D$D$ @D$L$|$4$#PEAt&D$L$4$`&'UWVS,u*j>EF@Et#EtEt 4$h E>D$E4$D$>‹F)~_t3T$4$UeU܃}tfF>,[^_]Í&EuGWF,[^_]Í|$|$D$ 4$U U܉|v>T$E4$D$zBxUWVSlU)óiEȋBDr  M̋z BDEȋMȉ}ċM܉E؋B@ \@:uE~ R`E@$M}̃9}!EԉU2t&p;UeMIy%9urO@ x~+}ЋM|$L$ E؉D$U$ UuUt9usUB@$U 'Ut&E̍+EăB 9E܍Hv}ȋwpM܋E܉Bl[^_]É$UiUfuE~ B@ttD$D$U$fD$ |$}؉|$U$EEBx_}̹9}܉l}ԉωUU@9}ǃ9A@ uD$D$E$U|Uȍv`tD$D$D$t$ D$@0$D$UU@ tn`D$D$D$t$ D$@0$D$U@E]t&U||$$D$Sl[^_]Ë`D$D$D$t$ D$@0$D$U_D$D$U$hUEU}ԋu؋9H $L$t$UUUWVSLEUM%eEԋBuԋP A<B @EB EċG߉OM\<D EЋ79F B G U`F$uĉ}9fJv JvJЀ v_t \fmMy<:9v)Mt1ҍt&  9u븍t&QɉUtHuJv"JvJЀ v_t \t&UJ҉Mu+G BG%DG@tE|$$ Uԉ:MAL[^_]ËMċuD$ |$L$4$>G밐t&MET$UD$ "D$ $"ỦE7t&D$EỦ|$$.MUE&uUD$|$4$MUv}ЁO 'UWVS\EV#ScEċUԋB MԋQM<uQJ VaEEzjM9H z B%_DBMĉMŰE@ U`@$q 9ΉMMEىMEȍ&Mt$UL$ EԋEȉ$D$E9Es8EЋM)MЋM̋M9J s"E̋U+x L$D$$M̋Ey D$Eȉ<$D$}u9uqÚJ +z xMA @tuL$4$8 EUĉMA\[^_]Ít&Mԋ@Eq EЀzMT$UD$ $UMЋ9H yET$UL$$U\t[ MЋM`@$;uЉs;}}ȋ}Љurw u9ljuwދuMЋ})ϋE9EŰ+z xfMT$ $uԋFMK tu`B$1% =:MԍEuD$ D$L$4$MNjUԍAEЉUXuԋN AvE+ƀ;u}ȉu‰אt&09EwuMЋ})Q B bEuԉD$EUD$ t$$(UƋEE\UD$D$D$ tD$T$$3t&UԋHMz 'UWVS|EeU1^EM1uċF MċQM<uQJ VjEEzsM9H z B%_DBMMЉUE@ U`@$z 9ΉMM̍E։MEMt$UL$ EċE$D$_E9Es8EM)MMM9J s"EU+x L$D$$ MEy D$E<$D$|}u9uqUJ +z xMA @tuL$4$EUMue35A|[^_]Ít&Mċ@EЃq EzMT$UD$ $#UM9H pET$UL$$ USt[ MM`@$ ;us;}}}urw u9ljuwދuM})ϋE9EU+z xfEt$$-FGJ tu`B$0% =:MčEЋuD$ D$L$4$MЉNjUčAEUWuċN AvE+ƀ;u}u‰אt&09EwuM})Q B aEЋuĉD$EUD$ t$$UƋEЃE[UD$D$D$ tD$T$$e3t&UċHMЋz &UWVSluFCZEċF@MB B<WtP@Ez }6B t#`A$u}@=t&EEEEEB~FH F<M;H G EG%_DGEĉ8E}}U܍EՋMD$T$ $,EBw% =ET$UD$ D$4$U}E׉EE{Eu~MB tO }G@t |$4$}ċF>l[^_]ÐE܉|$4$D$ EՉD$zUE9HG G륍v`@$+Ɔ}yUMU M9T$U4$UB<J AUD$|$4$MU;H UL$|$4$Ut&ET$UD$ D$4$UEECt&}y&A<w Erf׋@EB EEEt&)ED$T$ D$|$4$fUEML$D$$ED$EU4$D$cU}y}E܉D$ EՉUD$|$4$UM܋E}Eȃ)9ωEvUD$D$D$ tD$|$4$UA< t&UvME܉D$ EՉD$4$L$oUTE UWVSLuÃUF>P FOEԋMȉEЋWB @EB EB t`@$QMA A M̉T$D$ $4$D$EԉD$MA @t L$4$\EԉGMȋFL[^_]ÍET$UD$ "D$4$vUĉEM&EЉUD$ "D$D$4$BUST$4$X4$D$P FEԋB @EJ Buh utD$Eԉ4$D$WUB @F)|$|$D$ 4$xNjUԍGWFL[^_]f tA`@$u5`@$uD$iD$ D$ L$4$yZT$4$X4$D$<‹T$UЉ4$D$UЉBET$UD$ "D$4$ UЉT$4$p UWVS,u MEFD8FDF ~ EFOP FG@ET$U܉L$ )D$4$ U܋BuB@N tT$U܉M؉4$M؋U+}<9GWF,[^_]fT$4$U܄tƆB럐U܉M؉D$4$jU܋M؄R+EcD$D$4$M؋U &'UWVS|u ÃLFNx EM`EA$ HfM@~@ @+EE؍B:ERB g@EJ MG @E܋G EEB t`@$E1G t`@$:EEEED$ED$U4$UEċD$EĉU4$D$U}E@ ‹@EJ EMB  }4$% D$ ED$ED$rH ‰MEf%frEO }U4$% D$ E܉D$ED$UH ljMF@}M}uE܉E؅M9~M؉Ȁ}MME4$L$MD$EUL$ D$]U+EExUątUĉ4$T$EԋME4$D$L$UE@ @t D$4$0MU F|[^_]Ðt&}#EE31}E6MMEUD$|$ L$D$4$%U8E:ft G @ _}ft&sf4vt&B @ t&vE܋MD$L$4t&MA kϋ@E܋A EB u듍vE܉UD$ "D$|$4$.UEf&`tD$D$D$|$ D$@0U4$D$*U@ `D$D$D$|$ D$@04$D$U@EF[t&ET$UD$ "D$4$^UE~&}~EԉD$T$4$/fUD$D$4$}U`D$D$D$|$ D$@0U4$D$D$4$D$$UEFfiE؉T$UD$ D$4$^M؋U@&MĉUD$4$L$U5ED$ED$ "4$D$&UEEB 2Mt&MčE܉UD$ "D$L$4$U}ĉEB  vG f@*\vMED$ E܉UD$L$4$U}tEUD$4$|$D$4$EċE܉D$ EĉD$Mċ}ċUI M:&Uhuu]}0-EFVx @ 9@E@8UЉMD$g|$4$jUЋM̅@ EG t,`@$u ED$|$4$iM̋UЍ&`1G$.ET$UЉM̉D$4$UЋMB @T$4$M̋UkUЉM̉4$nUЋM̅t&z vr@(.Eċ@$9Et/tD$UЉM̉4$+UЋM̋EątGEĉx$F]u}]ÍF⍴&M̉T$UD$ 4$UD$D$D$ .T$D$4$;M̋U:t&`tD$D$D$|$ D$@0UЉM̉4$D$'UЋM@ tO`D$D$D$|$ D$@04$D$UЋM̋@8`D$D$D$|$ D$@0UЉM̉4$D$D$4$D$M̋UfUWVSLu63BFH FH U@ u@u E4$4tt&E`E@$FH+cUԁb߃EEEEW@ 1@E:UȉEą}1G `B$E6@EG EG LUU1ҋE9E\+EЉEЉEE+EЃEE~ M5E9E} MM܍&MdEҋM܉EЉM̉EMAtM M+} E܉D$ MML$Mԉ4$L$UD$oEԉ4$D$Ut UԁJ E1Ҁ}G<;D$E؉D$ML$E܉D$ E|$4$D$U?U}tO t T$4$MԍPHFČ[^_]ÍEEE@ W@E@ D$D$4$UMqMUfG `EB$t&ED$ "D$|$4$MMEG `@$ E1҉E̋E9EẼEЉEẺE~MMM9MfEЅM+MЉM܋ME}D$4$EȍMȃQFČ[^_]Í&E@ ‹@E؋B EE@ D`@$4UċPE@ >D$D$4$MMEfD$|$4$MżGME#fEԉ4$D$M"M`tT$ D$D$D$D$@04$D$UU@ t}`D$D$D$T$ D$@04$D$@E&E܉D$ ED$|$4$U/EUEt&`T$ D$D$D$D$@04$D$SD$4$D$_EIvcD$D$4$*ED$ "D$Uĉ4$T$MMEt&MM9MЉM>EЉE3vMM#MЉME&D$ D$|$4$UUQ&Mĉ4$L$=D$4$D$E膺UB @E؋B EB t!`@$uHEt&EG<G @&GE}t&|$4$M͸M;EEEzEEt&UW tE tD$ D$|$4$D$4$W%=4ƒ\DWEԀx Mԋ@(xP$9t!tT$4$UԋGx$MԋUЉPMԋŰP 4$UUEfMtEԃxEE؉T$D$ "D$4$UUE&D$ D$4$`D$D$D$ xD$Uԉ4$T$ E1H D$ D$|$4$uD$ D$|$4$G @g4bD$D$4$a!cD$4$j&'UXuu]}5FP F<BEt B @ uWE t`@$T$4$MD$|$4$#MG @ue9F]u}]Eto@EĉEB EB t`B$EĉMЉ|$4$D$辴MG @t|$4$M늉T$4$M5]t&ET$ỦMD$ "D$4$MЋỦEԋEEmvEEԉ4$MЉD$EԉD$&UWVSLuÃ4F>P FEEԋB M@EB MB t`A$VRfflMtIMuf t&t t t t MuōU؉T$UT$ UЉD$4$T$Et^ME\$4$L$E@ @u[F)|$|$D$ 4$NjUԍGWFL[^_]ÍvMԉD$4$L$E@ @tD$4$뗍0u mxt4b.MЍU؉T$UT$ D$L$4$~)t&U؉T$UT$ UЉD$4$T$fET$UD$ "EЉD$4$[U6&T$4$p4$D$TH D$D$4$EUB t@EB MD$ "T$4$L$UHuu]}1FH F<HMt H A Etz@؉UD$|$4$4UG @u?:F]u}]ÐUD$ D$|$4$ UG @tōt&|$4$U밍&UD$D$4$mUl&UD$ D$ L$D$4$SUtG \@t&HMt&'UWVSLuã0F>P FGE܋OMA I A D$D$ 4D$E4$D$UU؅]>OMNA@u B  T$D$ D$4$UUB @WEFL[^_]Ðt&HMt H A ZEt_@EG@ tt@9E| ɃT$L$4$UUB @~WM܋FL[^_]ÐD$D$4$UU؉EG@ uD$D$4$UgUrvGT$4$Ut&T$4$pUnt&HM t&'UHuu]}í.>GEWB tHJ A t?D$D$ D$T$4$BFJMHMt H A uEt;PG@ tL@9taGMF]u}]Ít&D$D$4$(‹G@ uUD$D$4$U9u띍vPUgt&'UHuu]}}->GEWB tHJ A t?D$D$ D$T$4$BFJMHMt H A uEt;PG@ tL@9taGMF]u}]Ít&D$D$4$‹G@ uUD$D$4$U9u띍vPUgt&'UHuu]}PM,>GEWB tHJ A t?D$D$ D$T$4$sBFJMHMt H A uEtCPG@ tT@9$GMF]u}]Ít&D$D$4$‹G@ uUD$D$4$U땐t&PUgt&'UHuu]} +>GEWB tHJ A t?D$D$ D$T$4$CBFJMHMt H A uEtCPG@ tT@9|$GMF]u}]Ít&D$D$4$‹G@ uUD$D$4$nU땐t&PUgt&'UHuu]})>GEWB tHJ A t?D$D$ D$T$4$BFJMHMt H A uEtCPG@ tT@9}$GMF]u}]Ít&D$D$4$`‹G@ uUD$D$4$>U땐t&PUgt&'UHuu]}ý(>GEWB tHJ A t?D$D$ D$T$4$BFJMHMt H A uEtCPG@ tT@9~$GMF]u}]Ít&D$D$4$0‹G@ uUD$D$4$U땐t&PUgt&'UWVS\uÓ'NA@E\BEz}MA I A }D$ D$уL$E4$D$UUԅJMNA@u G aD$ D$|$4$UUG @AzEF\[^_]Ít&HM܀t H A TEU@E Qfu t&@E܋E+E|$4$D$إG @U:F\[^_]ÍI FB@EDGEWUB J A }D$ &D$уL$T$4$V>B@Ou UB UD$ D$E4$D$MUMB @/EGFL[^_]fHM܀t H A YEUx@ PT$E4$D$UB @EMUFL[^_]ËR OFMEWD$D$4$hUNj@ dD$D$4$CSc4$D$跤L[^_]ÍvGT$4$HMt&D$M4$L$5E@ @u8MU !vT$4$&PUvD$4$뺍v'UWVSLu63 V>B@EDGEWUB J A }D$ $D$уL$T$4$4V>B@Ou UB -D$ D$E4$D$M3UMB @EGFL[^_]fHM܀t H A YExU@ PD$M4$L$蓞E@ @MU FL[^_]ÍvR OFMEWD$D$4$Dždc4$D$\L[^_]ÉGT$4$Mt&D$4$]&D$D$4$xPUt&'UWVS\uNA@E$BEz}MA I A }D$ "D$уL$E4$D$UUԅ\JMNA@u G  D$ D$|$4$UUG @zEF\[^_]Ít&HM܀t H A TEtgMP@ tx@Љ|$4$T$kG @E8F\[^_]ÐI FGEWB tHJ A t?D$D$ D$T$4$3BFJvHMt H A uE@EvtnOQEP8Uz}(PK@#D$D$4$8HMt&EeEG@ zGUF]u}]fL$D$4$OQt& PUE~D$4$G@ v]ȉD$4$Eet&it&PU_vRA@9t>GMF3fGEFR;Put&UXuu]}}>GEWB tHJ A t?D$D$ D$T$4$BFJ$vHMt H A uE@Evt~OQEP€}qR;PGEFmt&D$D$4$HMt&EUEtzG@ GUF]u}]fL$D$4$ OQt&PUEuD$4$G@ ~]ȉD$4$dEit4Rxs9PVQt&PU?vR;P}4GMF%t&@9BrЍt&ʍz'UXuu]}>GEWB tHJ A t?D$D$ D$T$4$BFJ&vHMt H A uE@Evt~OQEP€}iR;PqGEFot&D$D$4$HMt&EUEtzG@ GUF]u}]ÉL$D$4$pOQt&PUEuD$4$G@ ~]ȉD$4$Emt4Rxk9P`[t&PUGvR;P~,GMF/t&@x9Bwԍҍ'UXuu]}0->GEWB tHJ A t?D$D$ D$T$4$SBFJ$vHMt H A uE@Evt~OQEP€}qR;PGEFmt&D$D$4$HHMt&EUEtzG@ GUF]u}]fL$D$4$OQt&PUEuD$4$0G@ ~]ȉD$4$Eit4Rxs9PVQt&PU?vR;P4GMF%t&@9BvЍt&ʍz'UXuu]}} >GEWB tHJ A t?D$D$ D$T$4$製BFJ&vHMt H A uE@Evt~OQEP€}iR;PqGEFot&D$D$4$蘾HMt&EUEtzG@ GUF]u}]ÉL$D$4$ OQt&PUEuD$4$G@ ~]ȉD$4$dEmt4Rxk9P`[t&PUGvR;P|,GMF/t&@x9Bsԍҍ'UWVS\uNA@E4BEz}MA I A }D$ ,D$уL$E4$D$UۺUԅJMNA@u G 1D$ D$|$4$UڦUG @zEF\[^_]Ít&HM܀t H A TEHF@teU@ @D$|$4$KG @uaM9EF\[^_]fI FB@EGEԋWU܉@ P B }D$ L$҃T$D$4$rFV>B@Ou UB D$ D$E܉4$D$MqU܋MB @]E܉GFl[^_]A t Q B `D$4$ͬ4$D$M躬MĉNjA<Vfu ]EGu } A \$E܉4$D$UB @EԋU܉Fl[^_]ÐR FE܍GEԋGp}EEREUU8UmUUЉU'},}UډT$U܉4$T$~E@ @D$4$蚧Q fBvF@EQu0t+u/L$D$4$MMċGQhRE҉UډUEvGT$4$ئMt&T$4$G&|$4$MMĀ}t&L$4$]͸E&RE҉UZډUELUԋ!D$|$4$MݱGMNREU&U1ɉMUm\$U܉4$T$aE@ @E܋UԉUԋFHEЉD$U܉4$T$vE@ @tt&U9UfrU+UUfU+UЉUujUWVSLu趼óV>B@ELGEWU@ P B }D$ $L$҃T$D$4$貮V>B@Ou UB SD$ D$E4$D$M豚UMB @-EGFL[^_]A t Q B `D$4$ ‹4$D$UU@ B ڞtZ\$U4$T$艞E@ @EUFL[^_]ÐR FEGEGz؍c4$D$~L[^_]ÉD$4$UյUB YT$4$]蹵EDvGT$4$HMt&D$4$0?&U&'UWVSluvsV>B@EGEWU@ P B }D$ "L$҃T$D$4$rnV>B@Ou UB 3D$ D$E4$D$MqUMB @ EGFl[^_]A t Q B `D$4$ͥ4$D$M躥M̉Nj@ QG>v`REU؉REU܋UUԋU҉UE>Uԅ3A \$U4$T$诛E@ @EUFl[^_]Í&D$|$4$蠬GM̍uRR FEGEGL$D$4$MMM̋GQ,|$4$M賲MA L$4$]藲E GT$4$(Mt&U؉UU܃}U}tUUԋU؉UU܉U؋UU܋UUUԋUUUԉUkU8UE܉D$U4$T$wE@ @xD$4$xa&RE҉UډUERE҉UډUEU}U؉UU8UA}UډT$U4$T$uE@ @3t&'UWVS@@ ti@$T$ۆFƆ*)|$|$D$ 4$袓ǍGWF]u}]Ít&D$D$4$f4$ܤwt&'UWVSH U@t$@ ٞuz耾*]ȍP,T$$vEt]ɋE4$D$\$UB @uMF)|$|$D$ 4$臒NjUGWF<[^_]Ð@,뚐t&T$4$ f]ȉ4$E赣UT$$6Ɔ*E,vD$4$(&UWVSLu63EFVH UxheEE9U؋MHt P B M܅tiE$U\$M4$L$蔓E@ @EV)ƒMPHFL[^_]Í&ij3_UE<E,D$4$تB&K4$]ݜcE\$ U܉4$D$T$sL[^_]ÐD$ D$D$4$L4vD$4$ &B uF>L[^_]ÍvD$ D$T$4$\MA @uEƋMHvL$4$fUWVSLuvsF>P FEGE܋OA Q B D$D$ 7D$L$4$肠6V>B@Ou UB D$ D$E4$D$M职UMB @EGFL[^_]ËPUt P B bEtWG@ t_\$$ܘ\$U4$T$yE@ @ulUWE܉FL[^_]Ít&D$4$G@ uD$4$]E듍&GAT$4$耕M't&D$4$hfPU3t&'U8uu]}谬í>@ t P B uxt\Pt,tNRF]u}]u+ Ѓt뼋@t&D$ D$ T$D$4$^t>Fyt@ 80땐D$4$~f>&UWVS\u薫ÓEԋFP FWUVB@u A {L$D$ D$4$M較MA @O}F>L[^_]ÍG t G @ EE G B0EFE@}fEuE uEE@@ut&E@EG @}]"3E܉L$D$4$McMA @L$4$蟌MvVH } UU؋W+vG0,L$|$T$ }ԉ4$|$MIMA @E؉vU؋FL[^_]Í}fEuE uEE@@ut&EK@EG @}]3E܉L$D$4$MvMA @U؉ ]t&T$4$ỦM*bMG U |$4$ỦMbŰMЋB0EfGB f@9t&B f@vL$4$Mat&D$|$4$M襄MD$|$4$MuM E Eܐt&vD$T$4$MMMЉED$T$4$MMЉEcUE؋:BEvL$4$ MUWVSLuvsEVB@EQUEU܋HʋE8BEB @ }D$ .|$ЃD$T$4$MaMԅ>WUVB@u A L$D$ D$4$M`MA @'OEFL[^_]fG t G @ ^E pG 6B0Et{F@EqPG @!‰L$T$4$M_MA @ulU܉ t&R F UEU܋PvG0xL$|$T$ F@4$%D$M8MA @tL$4$#MfEPG L@!‰L$T$4$MrMA @ E܉E܉FL[^_]Í|$4$UЉMZ^UЋMԋB0E$t&T$4$UЉM*^MG Ux묍t&G,T$D$4$MMԉs&T$D$4$MMԉ &L$4$Mt&D$|$4$UЉM蚒MԋUvL$4$Mt&D$|$4$UЉMjMԋUvUE܋:BEnt&'UHuu]}НF>P FEGEG@ P B D$D$ 5L$D$4$܏V>B@Ou UB D$EMD$ 4$D${UMB @EGF[A t Q B m`B$uIL$D$4$qUD$4$T$j\E@ @uUUWEF]u}]ÉL$D$4$뵍GoT$4$MUt&D$4$fGYUWVS@%TEEEGE܋G@ tIH A t@D$M؉T$D$4$L$ =BFJ<[^_]fB t J A u`A$u]T$D$4$apE9E~]GE܉F<[^_]ÐeeeU؉ME3t&T$D$4$脈E9E롍&GeUHuu]}>GEG@ t@H A t7D$D$ T$D$4$tcBFJ8fB t J A uT$D$4$}~t%GEF]u}]Ðt&ًG븉'UHuu]} >GEG@ t@H A t7D$D$ T$D$4$CtcBFJ8fB t J A uT$D$4$}u%GEF]u}]Ðt&ًG븉'UWVSLuVSF>P FE܍GE؋WB J A D$D$ 4D$T$4$bV>B@Ou UB D$ D$E܉4$D$MawU܋MB @EE܉GFL[^_]ËHMt H A bE@Et}OQ&EP€}Px9Pt&D$9fD$D$4$PUt&EVE]ЋG@ ]E$4uE$%GE؉FL[^_]ÍL$D$4$xOQt&HMEfD$4$ԑ]ЋG@ ^D$4$踑]Qt&G)E1EEž)‰T$E܉4$D$.VUB @t T$4$ M܉OE؉FL[^_]Ðt&T$4$~Mt&t,Rx9PHv(v8v@9B |1&PUsv@9Br΍t&UWVS|uƕNA@EdBEz}E @ @ @ }D$ =L$ЃD$M4$L$U軇UJMċNA@u G D$ D$|$4$UsUG @z}ċF>|[^_]Ít&AEt A @ TE EE%=E.HVBU9tD$ D$|$4$MrMG% =@EGE t`R$Utu6E1҉Eĸ9EkEP9P BQG T$Uĉ4$D$ЉD$T$ MhMHHW @G}%DGF@@OUG @ZJMz}F>|[^_]Ít&I FB@EGEԋWUB J A }D$ &D$уL$T$4$DV>B@Ou UB D$ D$E܉4$D$MCmU܋MB @E܉GFl[^_]f@ t H A ^D$4$zNj@uWtRt5%=vB@E1EEbt&D$|$4$@GuREEكxa EEMԋ4$D$]UyUNj@Eu au fyEEuuOكxaكta$]]K\}EE$](\Eڞzzt"T$$]#JEU8Utٞfـ}ft}\$U܉4$T$oUB @M܍GOFl[^_]ÍR OFMԉE܋WD$|$4$EGUEqf@%=PE҉yEE=&GT$4$tMt&\$4$f}ԋU؃tW1u؅tM8MtE)Љ€} ډT$U܉4$T$Jt&"؍c4$D$Nl[^_]Ít&|$4$]U貅UEkT$4$Hsa&T$4$]蝂1EEE|$4$`&1ɉMUm\$M܉4$L$tmvًE1҉UEmP FEBȃ wm%=tYET$D$ 4$D$JbPtSD$4$[}@ @ucEF]u}]à w,4$D$D$GfJtJ`@ @tD$4$k돍U(uu]}>Pʃ trPt)D$4$|@ @u9F]u}]ÍvJtʃJ`@ @tljD$4$j빍 w,4$D$D$F뒍v'UWVSP FAE% EE%=t{L$T$D$ 4$Ud`UH~D$4$U[dU@ @B<F<[^_]ËE v,4$D$D$ E<[^_]Ðt&MԋIMkȋMԃA`@ @iD$4$UfiUB<WB @PT$D$4$U<@U1&UHuu]}耀}F>xu0F)GWF]u}]fA EEԃEvI}iE%_EAE\E@1F>놐t&d␍t&|$|$D$ 4$\`?F>=t&L$M܉4$ zM܅t`D$ 4$6{M܄tIcz<xB(P R tЋ@D$ dbM܉D$D$ 4$I]M܋P(L$M܉4$U=M܋U؋P(t&L$4$hMEUԁ+A EB |EtB)EUaQ EM܉$uM܋A @ QU4vL$4$>IL$MD$4$e@@thE4$[U4$T$E"H4$D$ED$8UB @t T$4$jaUGWF]u}]Ð@uBXB tKEF)x|$|$D$ 4$|[^_]Ðt&Ht`H4$D$7GHG HMG Eɍ9%DEȋ@UUȅE1҅EfuUEAEʉUUE)MȍEUUuuEE}v)׉>Et;}H 9y؋}ȉ>ՐED$ D$|$4$uE}uOD$D$D$ gD$|$4$PuUĉF|[^_]ÅʉUEm؃4݃<T$D$M_EȉDMx@%=bED$ D$|$4$tMEcD$4$j9AP$Mf@MUȋE1҉UԉEm؃4݃dfUWVS,Ut2~@ @ v}utHMAvTB+E$M$UD$ L$L$AUU؉EEMqB,[^_]Ít&ɋdf$UD$ "D$D$ sUTuܹ/s^MA 0EPuܹ1d.ut @ t$UD$D$,pU؉ u܍-d:-dN:.dN:HN:HM@$U؉D$sCU؉t&u܀>OxxnMA @Eiu܍As:AsDN:Bs4N:H'N:HMA @Et&u܍4M:4MN:5MN:HN:Huܹ duܹ9MMA @Evu܍Hs:HsdN:IsTN:HGN:H:MA x )@E-t&uܹ9suF @EME$U؉D$goU؉ƅ$U؉t$k>U&dD$$UG0uU؋F @Ef@ I DR&$U؉L$eOU؋@ &'UHuu]}pݰF>@4P taJMP D$ L$T$4$~eD$4$D$l0F>]u}]Ít&tH A ubD$4$f`0Rt`D$@4$D$hefUD$ 4$kUԄu6MIUT$D$ "D$4$nMvbUԉD$D$ 4$MMUP&U8uu]}`o]F>P F tB u}u F>]u}]Ít&D$B M4$D$C$EKMU4$L$T$D$ NMA @u0F>뜐t&T$UM4$-UMBcL$4$WM뿍&U8uu]}pnmF>P F@< uEF) |$|$UD$ 4$NUǍGWF]u}]ÐT$4$i4$D$:럍UWVS|UeE1mȭ EMċ MA tȋ IMwfEM̉L$ MЉ$UD$L$D$:dUt @ EMĉB Ue3-|[^_]ÍH 8dMuu}E$D$ D$|$UTU|Qub|$D$$0끍&D$ IL$@ $D$DiUE@t&H/&=%t&7=^t&1Ut&<$D$Wgt,<$D$>gtjuËU$U 1% E1teERdUftUuuuD;Eʃrw tD\TփuUƋMt H| $t\DE։$UD$ t$D$gMċUE MIdD$ ?dD$dD _\U1҉WVS\ujF>xx@1%ƒAED$ ET$D$Uԉ4$D$kaUԅ|B< uN€yx4F>\[^_]ÉD$4$f4$D$T7Nyy̋Mt Q R9t4‹@<uID$4$-릍AtS늍vHD$MċIL$ MăL$Uԉ4$D$fUԅEt@ P늍t&UtB .뚍'UHuu]}iÍ>4$ED$^‹tF>]u}]fUD$4$aUMD$UD$D$D$ #L$4$gU뛍vUWVSuh} F@t9G<TE|$4$D$ D$,FW„tn@\D$)4$Pd$}t.F@ttY4$ IHU01[^_]Ð@x(E|$4$D$D$ i6[^_]Ðt& uԋED$|$4$D$ =6uD$|$4$U/yUD$|$4$T$ 6eQW BU4$T$D$3+F&|$4$hW}t&E4$D$D$*fG @*U1*[^_]UWVS\}fӦEEԋPEÈF @ D$ D$ Ủt$<$T$XhUP9v H EԉuЉ;MuA G@ EEG\[^_]ËEԉEȉ%= tUԉ<$T$ %E@ ED$,sD$ D$Uԉ<$T$(:EtUȋB 0G@ _P`JL$T$<$M)M/[d<$D$ )\[^_]̓ )wt&E0VQvEԋH A 렋@f@tMMȅtpUȉ<$T${'UԋJ yt&N lT$<$B@ fE<$D$3'Y8ID$<$Z<$D$D$ZfUWVS\}6d3EЋJ։EȉÙoF @ bD$ D$ Uȉt$<$T$;V7MЋH9P UԋV 9UԉEuMԋAЃ!%=uBUԃrdD$<$8'\[^_]Ít&%= [9ЉEJOA`I G A k@EI MD$<$UJMM̉Eԋ`1QҋUt `D$@<$D$WUD$M̉L$MĉD$t$<$L$ U'UJ"r tLẺEăx t(t +pbr 4$UYU MċE@ @JEԀJ@B MЋ1NGHHD$ D$T$<$/‹Gx*EЉG\[^_]Í v T$<$Uf UJEЋ0NEt& FT$D$ D$<$UD/UTT$D$<$UR(UUЍG8t&ŰR UfB @K<$BD$D$D$<$D$ T$U$UMԋB HAAutkdD$<$D$#t&MЉt&v u2t&dD$ T$<$D$#GD$)<$Ul[Ut T$<$OMȋUЉ G ED$ D$L$<$U'^UEz@T$<$D$UpOUT$D$<$UqB FMRF)FP@tjt f4$>uE4$fW@‹E@ M܋@T$D$4$U'ỦF><[^_]ÐU܍GWF<[^_]É|$|$D$ 4$=-D$4$oV4$\9FP t&E@ #U܋@E؋F)9EE@M1҅tNU1҉uԉ֍vt$D$ M܉L$Eԉ$[?UЅt;ur΋U؋uF@M܍GOFt&E1҉UEm؃4݃<M܍GU؋I T$$L$U7UMt&D$4$OEM؉|$|$4$L$ UUȋB$t&B$ ɉ\ I Jvpr$4B$B$Tt&pr$4B$$Uȉt$UȋB$)pr$4B$0L$$UUȉt$$UȋB$Bt8v vt($Uȉt$Uȋ@ @B$J B$MԉT$UȉD$GUȋB$J B$ BT( I IK$UD$ NUD$D$D$ H$D$ƉD$TUȋ@ pB$B$ J&pxr$4z$<}B$Uȉt$$<$IUȋB$pr$tK tF t%Mсp щNMUD$Et$$} E]u}]ÐUVS E WJTu1~8%V0TV8UEm؃4݃~F$P;V(|4$l2F$P} N <}N |}N Z~@ u@1҅FLt@VLT$|$4$D$ |]}u] vD$4$8밐&USE D$ =}D$D$E$[]Ð&USE D$ =Ý}D$D$E$[]Ð&USE D$ `=]}D$D$E$[]Ð&USE D$  =}D$D$E$Z[]Ð&USE D$ <|D$D$E$[]Ð&U(]<æ|uu}} 4$|$|$4$D$ D$]u}] U8uu ]}@<=|F xtaUD$ |$t$$jF @F @tJRtUD$E|$$E]u}]ÍvEt$$E@ x눐Et$$-@ @량'U8}} ]u;}{G pF@ux_ED$ t$|$$G @G @tHJtUD$Et$$E]u}]ÐUt$$됍&U|$$@ @롐E|$$@ pI&'U8uu }}]:ÊzF wLFD$ D$GL<$D$Etdt$<$‹F H u HtU<$D$ F U@t@Qu59ltLV ]u}]Ðt&F <$D$-HאU<$iUBHQ9luUD$<$!U USE 9ÅyD$ %D$ET$$[]Ð&USE D$ "@9=yD$D$E$z[]Ð&UM ]Uu18xBLt@rLt$D$ L$$%]u] U8U ]uu}z 8×xtwƆ@ uPƆ1ɅFLt@NLBT$4$D$ L$]}u].D$4$UUU뜍t&T$4$U]Ux oUH}}]u7wO@wHE)vUm؃4݃GEGt+HPIM}1t'BtE+@E}9t8GEF,[^_]Í&t3@9uȍft31Ƀxxvtk 녍vtk 5Mti@ 1ɀ80EtYB 802M܉T$4$)MU܉D$4$})U11U8uu]}0 phBRx[ MwAFt5RtLr2ft&ҍgT$D$4$&t&@y]u}]Í'UWVS,uf/coN>AEƒt*EtEt4$ENAx/PR4$&F4D$4$F0hF4B;BBhBBf+V P`PVD+V@P VP0PUPVRPF>,[^_]ÍvuKtn ;NA,[^_]É4$U'UBMf@tċ@ 80뮍D$4$' UWVS,u-ÞmF>@t1Ƀtt 4$6M4$I%F4D$4$:F0F44$,%hMB;BBhBBf+V P`PVD+V@P VP0HP`RP+V PV@0@4@8P \@,@$P(F>,[^_]ÍUM4$^&UBM?vUS^,[lE$ 1=ƒ![]Í&'UVSu,lVBуtdtoJ FtFHtt8IvtB[^]fuKtv uЋ[^]Ív4$,*u#N[^]Í&HVit@ 80릍D$4$x$V댍t&U]uƋ@0!+k;F4~4$4${]u]Ðt&U(uu]}*jhJȃBJP`P V@VDPVPxP @t D$4$t04$]u}]Í'U8]I*FjuƉ}D$BD$$GX|$H4$ET$E4$D$D$4$!V4T$4$V04$D$V4VT$E]u}]ÍUWVS@E瀃tEtEt 4$E4$+F4D$4$F0F4F@ XWH U4$M܉D$M܉L$4$7 hUG;GGhAAf+N H`HND+N@H NH0HMHNIHF,[^_]ÍD$ WL$NU4$D$hUG;GWU4$ GUG&UWVSJȃBJHP`H V N@NDHNHMHMHH @tUD$4$UƆ}ԀEԅ9rC։ t&9r-@ u$UD$+U9ƂsӉ֋E䉆04$D$ D$l@ 4$D$l@ PtD$4$l@ P_Pl@ HDF><[^_]ÍJ9r!@ tnBJt&?F)ȃ|ω%&+V L$D$ U|$4$U N 븍UM܉D$4$UBM܉&'UWVS,u#þcF@t1҃tt 4$XˆU4$kF4D$4$\F0hF4UG;G<Ghxxf+F G`GFD+F@G FG0WGGF@Gf%fGG 1tBlG$G(G,pG0ƆE t1E t F,[^_]Ðt&D$ D$l@ 4$D$l@ Pu9_Pl@ HD냍t&U4$GUD$4$l@ P뫍t&UVSD@D!a@pQD$PT$DPEpEuSDhAIT0D$PDp@1q[^]Ít&t[PDp@N }D$+ T$$$}D\thQIT 0D;pmqǁ\D@$D$$'U]9 6`uuD$4$VRP,ptF]u]Ðt&F]u]vUWVS\u_EF@EыhHʃPHN BEB`B F@FDBFBEJMBBfEҋB BtD$4$U*UȋJ,MƆ}܀t[M܅}9}rEỦu t&9r*@ u$D$UUȃ9Ƃs։֋ŰXMԉ0@4$USUf}A4$}x^D$ D$l@ 4$D$l@ P_Pl@ HDME؃\[^_]Ít&}9}M@ MA}"t&E܅Mt4Ht"It@ 80zHG E䋖B @}L$ D$D$D$BU4$D$T$i|$4$D$ME؉E؃\[^_]ÍM9M|o&F)|V}$x2f3vD$4$l@ Pb+N |$D$ E4$D$UȉM+MċUȍ<~ lfD$4$UEMAUȉ}~t#t&D$4$U=UȄfiT$4$MnMċ@ @ft&UWVSPEt&EtEt4$EFU@tqFLte@NLMBtbT$U4$M UtL+ƆtEfqUD$D$4$U!EBu+uU4$FUD$ D$4$T$F4D$4$F0F4t U΃D$hg$UD$D$ D$D$UEoUDD$4$E4$D$D8D$4$dž8MUĉ4$L$T$EEċUD$ T$T4$D$4$cF@ @Mt'@ @4$D$XM@ HD$+P4$D$`P,"`x,`x,`@,Eċ`P,`@,U$MċUL$T$$PTt D$4$`@0Tt6d$UUUT@$EȉD$4$EhB;B@B}hBBfU+V P`PVD+V@P VP0PUPPVR@ffPP 1҅tQl@,P$@(pP0VP,H8X;&PlDEtUD$4$U@ @Ez @9ljEEuXpU)D$ Eĉ$|$D$MċEUL$ MD$T$ $K9uZREMD$ $uD$ <$)t$EuqMċuD$ |$L$4$1EċUM4$D$ T$L$EUE$T$UD$tu FUe3D|[^_]ÍvM9t.t~gD$ED$ $ p냍`@4$‹`H`@ D$D$ SgD$T$UL$4$3UB E@E`@,9fU4$UBf 袳$ugD$lD$ CT$$\ugD$lD$ ET$$8ut&Ux]E Iu։D$T$$y 1]u]ËE%=@t=`tލD$4$̍U]v sI}u}EvE@qttEL]u}]Í&EUD$E$\Up NjET$4$D$EcDED$t$$UxEU|$$EEk&UWVSuÐHEԋF@EȀt#EtEt 4$EȋUԋ:G07 K@EG EЋMЅU҉UMЀ9+sF@f%f=AEԋUЃEMЉD$ L$ED$U4$T$yMI M4$E4$D$F0F4F+Eԃ( FD;FHFD&U+V MԋEĉAUȃQM̉4$L$ D$D$4$EMUԋB @D$D$D$ L$ MЉD$4$L$t@ EU UԸ+E1҉EMԋAEEtBQ Jt M tU1ҁM}E[ DžtE EtMԋA x  EEt EEԋMԋF0;F4g 4$UtU#t T$4$OEtU4$T$9M̅tM̉4$L$#EG  @;E+D$ U|$4$T$|EG y EċPBMFD$D$D$D$ D$|$4$ 4$D$l|$4$E]U4$T$ D$PjD$ļ[^_]ÐG"fgD$4$ļ[^_]ÍvED$ "D$|$4$Et&B|$4$D$D4$D$|$4$EU4$T$ D$jD$*cX݃Lo\$4$D$4$D$4$D$|$4$D$4xf|$4$Nj@ :4$gD$D$4$:D$|$D$ D$4$D$4$ MԍFļ[^_]ÐrwD$D$4$bEEhvB @i D$D$D$ UT$ MЉD$4$L$,9 UԍFt&D$4$D$bD$ D$MЉ4$L$mD$4$D$EvBF0F4D$ UD$4$T$4$QTdž@tD$4$AdžTD$+P4$D$%jdžP}6hG;GGhxxfE+F G`GFD+F@G FG0GMȈOGF@f%fGD$EЉ4$D$GG 1tBlG,G$G(pG0FG,8D$4$`dž8Uԋdž@(D$$D$UȉWtCpļ[^_]ÐЃPFωT$4$ @ Hf|$4$[&D$P|$4$kMĉ4$L$)WD$Ẻ4$D$=EX4$UUt&D$ Uԉ4$T$T$QEt&E1EDžtE"fU1EU t&AYt&<[^_]ÍL$M $-U똍UWVSLuvs EV UԋFDM؉FDF@EtEtEt 4$E4$F4D$4$F0VF4B mz{D$4$ FP Uܺ@t4$UhŰG;GhGhxxfE+F G`WVD+V@W VW0WUW`RWUԋM؍ M+V WVG0G4G8W \W(G,U܉W$VB@ M1ҋFLMt@VLW4z EmE@ 2B EH0MvE܃}^ft7Mك@o݃TovJ,ft5݃ToٞSك@oJfMA @G8B @Gt&B f@vM4$L$UUك@oMA M4$L$UOU݃To D$T$4$[&D$E4$D$UjU M4$L$U G0HÚ tD$ D$D$4$ǸŰB<T$4$G4FMA f@}t-fEt0T$4$U5U̅>EHB f@uЃ}tVfEcvT$D$ "D$4$UŰB2B @.MA f@8 t&B f@PC3'UWVSLuÃhVƆ`AIDF F0;F4jzx|@ xp@ x@~D@4$F4D$4$ƞF0F4DD$4$ޭF$EԃE;F(M+F V MċF ʃV$džD@=GhA;A%AhAAf+N H`HND+N@H NH0@xHI@0@8H,I]@1N H8@D$!\4$D$U躾@0@ @\@ FU@ L[^_]Ðt&D$D$4$U@ H8@ /PfFL[^_]Ív@FD;FHFD:+V |$4$P$hF0;F4H4$dFL[^_]Ív4$蜦V4$|V$UԃU&4$l4$F뮐GD$|$4$EUnUEz&D$D$4$%&4$UMMAUt&D$D$4$P&OhD$4$躘4$UFDUfU8uu]}íF>@t@ tgP `1It#`D$@U4$D$UD$T$4$GWF]u}]fD$ "D$D$4$y'UWVSLuF>PUԋH V M@@8t x lD$D$ D$D$4$ϣ@ UB R@ @9D$F@P F4$D$蔒FxD$E4$D$mF>@@L[^_]ÍUԅt9UԋBt$@utB 80XvD$ D$U4$T$蓱MF>L[^_]Ív4$u3N>A@L[^_]t{Uԋ@FEWGG>%~0M ϋ`D$<$L$U誦UȄF(E܋x A)}}}yE؉}}}̋9x }'|$M؉L$}<$UVE܋Uȋy}Ћ}ЋEEDEm؃4E݃<EIE؋ L$D$<$UmM}܋E؋}xE؉xUȋFzH$E$UȉM豭UȉBMĉD$L$U$蕊F@,zD$T$M $=D$E$讗WGF@0D$M $UD$E$yD$M $jUȉG}GĜ[^_]ÍvEUЉMAĜ[^_]ËM $D$D$}<$TWUD$ EЉ<$D$D$螪EUЋEMЃU܉A5UEЋ}ЁW>D$ MЉ$L$L$EED$ EЉ $D$D$"EE$:6Ez$UȉMǫUȉBMĉD$L$U$計EshD$ D$D$}<$hU܉B U܉<$UQM܉AD$D$<$7Uf~CQFf D$M $wD$E$XWGEGD$E$U|D$D$ UȉD$T$U$ESEȉD$M $$-;D$D$U$JuD$ D$D$ D$D$T$ D$D$M $.taD$E$yM%h,nD$ D$E$uF$WGEG ;D$ D$U$|:sD$ D$ D$D$E$:D$Mlj $艫M@ @H`E܋Uȉ}؋xD$$詵'Uuu]U PMu@t^D$ T$D$4$bt]u]ÍvD$ T$l@ 4$D$!뽍vuMT$D$4$6뢐&UWVS\uãEЋNAEЋAH F<4$|$U'FU@@ 8t x lD$D$ D$D$4$UvUt7@ t.B R@ @9UЉ:$4$TUЋz UG ?A W0U‰Eԃ}ftك@oQ}fG PA Q@9t)ЃEF0;F8F+E9EZ}̅tG1 &UԍBEԉT$4$菮4$D$賐UЉD9}uЋUЋE̍UЋEЉF\[^_]fẼEfEt E@A0E%EfE}fE|$4$MMOWUE@<G 800A<5fU‰EMt&A f@݃To_ k4$D$[\[^_]Í&L$4$M蝁M|$4$M腁MnBfV@D$F@@P F4$D$芁zhD$D$ D$|$4$vL$4$M荼M݃ToiẺD$ EЉ4$D$D$U/UE~Ẻ4$D$U“URA f@E@fG f@f}$fE'};fEt&fvG f@jvD$L$4$UUD$|$4$MݴMd&G f@v|$4$M5Mك@ou$: EH33B 80A f@L$4$M誒MtWA&L$4$訠@ RU@ Ẻ|$4$脠Nj@ tD$ D$|$4$SG0E;Buԋubt&>G Ủ$T$5tu|$Eԉ$D$Uԉ$ljD$Eԉ$財G0u=@;Ew3UԋB)t$t$D$ $jw&uЋu@ SHHB @;B(D$D$4$U蕲UgT$D$4$MvM‹A 2UD$ "T$D$4$ܼEdT$4$(T$D$4$8R JOG f@vA f@Nt&'UWVS\uvsF@d4$UỦ׉E܋ND+~ E+9 E}A׀}FDHMЋxHMԋM}@)lj}؉9M+E+~ ȋM)ω}9lj}ԉ}]F)9E`E؋M<EЉNDE1MԅMu44uuFDHMԋ@MEV }T/E~$}}䍎1f 9u})lj4$舘FDPH;ND4$lFDPVDPPFDH+PNDxFDE~ F@H F T$4$L$M+{MA @F)F>\[^_]ËND+F +EEE,4$$0D$4$FDPF `VBtJJ VF>@\[^_]ÐFD׃@E܀v}_vE؋F)9E}؉T$T$4$|$ ‹FDHMЋ@Es&MEO׉u΃҉t5F@ uD$E$Ủuȃ躚ŰMȅ҉uˉϋuL$4$(M|$|$D$ 4$M5MȉFDPUԋ@&'UWVS,uFCENDF <;}D4$4$4$F4D$4$F0F4F@u|X@ 4$D$y4$賰0D$4$葖FDF `VBtJJ VEVBf%f=@,[^_]f@ F4$D$y낐XR 벍vVNDBtDtt:4$u+F)~C4$蜚D$D$4$wV>,[^_]Ð4$輝VQ|$|$D$ 4$l롍U(}} ]u萷Í7t$4$]u}]Ð&UWVSLIt&MhB;E Qr>wQFV,҉QD$E$wUhAA뀃BF,D$E$,F0UD$$ QF0MD$ $vF4tU;dtMD$ $vEhAAFMF FtSD$E$UhAAt&F UD$$JF r[^_]ËBуAMX@ @ $D$uUXV$@ PF(@ @u*@ +BB F(RP F(@bMz $D$uED$ $轭F(UD$|$$跐F(`F(HF4V(@ &UWVS,uhxx)@}E t9tD@myFx pk4$D$`x,[^_]Ít&%=uftb;}F}WV W V@VDWVO9Љ0FG`%=tnG,[^_]ÍvFxxkD$4$w؍vF4$D$릍t&E4$D$hPUxLt&G @ ,[^_]ÍHkD$4$TwpvUWVSufchBxz 9t"@y󍃸kD$4$vH9dVNjGF G F@FDGFO9‰0G`G[^_]ÍV4$D$r~ҍt&T$4$hx@낍UWVS|u胲ÀVBf%f=B@t`PSB@ u9?u.nD$4$ut&R8rdž$DžhP҉эDžƅƅmf t7UT$D$$ʉ$@[hP wXnfx  vP$CP(B @9tu؋HD$yL$|$ 4$D$Et @ xu4$D$D$ 4$ljT$D${k|$D$4$s1t&ƅBHlD$4$s|[^_]Í&hBHƅ\tH ƅ%BPpgH$&1Ҁu$Љ|[^_]1Ҁh\4$`dž\몍&D$ "D$D$4$設ƅThD$4$|$hrt&GF0;F4~4$8hP@҉x=w Fu%@yڍlD$4$q;0F J B F@FDBFB0 8 @=DžDžƅDžGFND;F$F4D$4$tF0F4D$|$4$@=UR8tv~l1ƉωfD$ $y9ދhIh@hHH`H F@ NDHNA0;FHFDG +N |$4$P$4$.&}hD$4$jotOtEt;@f%f=u!_&@f%f=Cu勆h9H~e!ȉD$4$mhAAHN H N@NDHN@0F;F$[M~tHffDžFHfff|tGFPfft"4$PuދFflD$4$mtDžS4$L$~hPP@0:Rz@B,@@mdD$4$L$D$!\4$D$@A \@ Fz0X@ @B$X@ 1t@A\B4B(P J9|[HI 9+ʉP P P 91҉߭؃4݃<0Q D$$L$ӃBtB @%Bt61Ttb9uꋽtDP <%=,lD$4$jX@ @@HHF+9TDž߭؃4݃<I L$$L$bƅD$4$q]D$4$qB,BɉHB4$D$fzz0 J( IF+9rDž߭؃4݃<@ D$ $D$X@ @4$D$0eXH B$A H +HH AA @A @ ƅXlD$4$-hfhD$4$hMBB fB0lD$4$gG|$D$4$hD$D$4$pND;NHND+V D$ D$4$ށ.8L$ 4$D$D${P 1҉߭؃4݃<HD$$ʌ‹PQ D$4$菞@@4$詟FD4$D$bD$ 4$L$D$4$}A% AFJ(ƅL$ 4$L$L$螂]|$4$@TxD$$Ӑ4$襞NDt&'UWVS,ufcFxPr*hy9QUD @Pff}WV W V@VDWVO0NT;V$|eV0;V4EW`,[^_]Ít&hPн^mD$4$bdȍt&E4$AqEf멍ET$4$lE뇍t&D$E4$thEyyhJMzt&F@4$D$hD$c3 U(uu]}ПFxxrPhy9VyGF G F@FDGFO9‰0DG`G @ ]u}]ËhPhy8mD$4$bˋV4$D$j먍t&D$4$hshyWF@4$D$hD$br&UWVSLu趞óE܋FxwP轼hJ9σzJGO`G N F@FDGFWUԋhW@JG 4$D$UȉMaxG 4$D$2^G8MUEE؉M…Ɔ9MdE}U܋D$4$~UE4$yhh}}EUԉ0E؃L[^_]Ði4$D$aE؋E؃L[^_]Í&hP@\mD$4$`E땐D$4$PqhJb7Q9U+E}̉׉MЉ+f$D$U}UȉƂ9}?}u΋@ uƍt&0t&ZGt&t`W,҉QuTUԉ0D$4$y\E؃L[^_]fG04$D$]\G4t;dt D$4$B\4$jxEԉ0E؃L[^_]fGG GtD$4$UȉMhMUȋG,MEEG8MEEvGEF EG @$EEfEE܉֋MЋU}̃)TUU܋@ tct&X@ @4$D$4[XW$@ PW(B @uX B +AA W(@B G(@LF@4$D$hD$`^E t&HT$4$MZD$ 4$G(MĉD$4$L$uG(`G(HG4W(@ v'UWVSluEЋV UȋFDM̋hFDzBExzMȉ}UEʃUMwIFt=;}UEt`UB=1҅ l[^_]fm@@myE@m4$D$]l[^_]‰ËEȋM̍ MԋBǃ}؉BGO`G N F@FDGFGEWU^tY0&iD$4$\;&M4$L$lhBEE܉EMt&G 4$D$MrG 4$D$XMW8EEƆEE9E}GxEЋE@ AEEFL@FLAF0;F4RM4$D$UdUM4$U#tUhh0GtYO,8ɉOuMM܉0D$4$UWU9ƆEt&}4$UsU}uE܉0}D$ D$l@ 4$D$U-vlU@ H_Hl@ HDl[^_]Í&F 1҉l[^_]Í&hW8@EE5EGGfEG GtD$4$M%cMW,%=4$UM辅Uf}AMudE9E}~E@ErEE@EtƆEdvEF&*D$4$iF PF 1҃&EЍy4$D$UM"vMA>4$qUX@ @4$D$U9UXO$@ HG(U@ @C@ +AA O(@A G(@t&EԃEE9EEỦΉ}ċ}M,@ u$D$U]uUƂ9}r }űЋEЉ֋Mȋ}ċŨ+ELD$4$0lU@ H*MMЋ@ M(EFL@FLEF0;F4ZAEE4$D$UMtMAM4$L$SUID$4$MSD$ 4$G(MD$4$L$nG(`G(HG4O(@ UD$4$UtU*EEMGO PM䋎A @D$D$D$BT$ UD$4$T$E~i|$D$4$_V4$U=cU4$UM'cMUE0ExJ=E@ 80u)L$4$UkU@ @.E4$D$UMUM0&'UWVSLu趑óWU l@ 8G MBMЉEȃ9ErE)ȋO ȋM E:MEЍLM9J [0oD$D$D$ |$4$8]D$ED$ M |$4$L$]D$ 4$覌fhfPxHMωр?t}@y@GD$4$dh@d+V QR V  I N Ihdjf9`׃}PN GW`G F@FDGFG0GE?GGfEG GtD$4$U܉M\M؋U܀}u 4$kG`f}AtG,L[^_]Ít&l@ @ (P G@ yE䋎A @oD$L$D$$|$ MD$4$L$UzU܀:u2gi4$T$D$RL[^_]ÍL$4$chPUPED$ E D$l@ 4$D$mD$D$ |$4$mMBMЉEL$Eԉ$UGU܅[D$ "D$D$4$ی@+EG D$ 4$D$ D$lU|$4$T$0}L$4$U,gU܋@ @tTtx t*4$ƄDT$$4PD$4$g@ @t̋@ u} ED$E 4$D$O4$'n} Tt x 4$A4iD$ T$D$4$|T}t x 4$|$ U D$4$T$m|D$4$=fl@ B t3@ER U 7@ @b@ ]PED$ "D$T$4$E l@ @ t3RU@ E @ @8@ 3&UD$ "T$D$4$觊E vUWVSE u賋ð8FubtL FGFGF8G F<1fLV4 ‹LV4L9Fs[^_]Ív%F벍F8$ɂF%FUWVS,} uFJ9BrQ1F tF8FfF8AFff>tEE.E)}҃WuWt UWW  J}t BJ1}E  9EȉEv}+M?WЃ)ƍED2EE9G hEx MEm؃4݃<\42UT$M4$L$Ec}<$~D$D$D$ fD$ED$U$؅MI}@Ĝ1[^_]Ív^~8~v E9E+Mw)t}t J9EC J}t$1҃}t+U҉9Ev<QMEEEE1I /)t&1EfJrqt&UEE}t&}mD$}<$UIĜ[^_]Íx#PEE..x.$x.E&x}r fB}$BJ1B EE!t& E"t&x#cU#Uu #t.)G UO WU1EEUt&|t+<O@ }tN uH8O@}EG G@Vt&Mԋ}1M5}2MЋA0MЋ1EE)ȉ%) 1كDo&9u؅ كta1كDo&9u۞M^7M`;EM`@$E$ݝhxOhxE݅hMH\$t$uȉ|$D$ D$t$H )H $L$xn}xHN 6)N t9x }UEfMv9v z BtE fz}vE}.G.G.f 9M}t$$|$xfxuй+N E M܀}}MH+P QEuM܋H0V|}9~ p L$E։4$D$SE܍uH A}}G EED$E4$D$xaxEEE}H+P QD$H<$D$8EE,fhv؋}ȅM1#9u nOvEEEM@fE &ED$ "D$EЉD$M $xt}x}Et&}14}̐ u 9uM}<$x@mxEt&EE@ hM׋H+x yUt$ ML$}|$E$}TUb߉T$D$M $6D$ }|$UH$D$HYMHR PuvmU$t&MȋủUMMMȉMxf< tm< th< td< t< t&uk< tX< tT< tOtED$ED$xt=xtt9v< u'}t< uUE+E̋UEE[v< tt&EЉD$M $xnxt&ED$ "D$EĉD$M $xrxEEXL$D$M $c}v}xE܉D$}̉|$E$x{AMxEH+P QuEuH|$D$}<$bHM܋R=fED$ "D$}Љ|$E$xqMxEED$ "D$EЉD$M $xuqMxED$}<$xKn|uȋxMЄYiD$D$}<$tP|uȋxEqI A}H׋+x y}st$ ủt$}|$E$xQxMa߉L$D$u4$x3D$ }|$H4$D$UHx1A F9O}&u  H1A F9r#Eo&E$x^x>M+M̉MEE3H׋+x yD$UH$D$2MH8W}L:89O P EpED$MЉL$u4$xDLxEEt$<$x0Mx9ȉE9EE9ẺEs@E }uv t9wEE"M׋H+x yD$UH$D$ 1MH8W}L:89O P 't$<$x/Mx9ȉE9EIMM̋ẺMu19sB}t& t(9v!tكtaU&M+M̍EMD$uЉt$}<$xJxEL$D$E$)^UHRD$ t$ED$U$kE3D$ t$ẺD$M $xjxEM+M̉MERMȍE܉MMD$ D$uЉt$}<$xjűxMM܉UM}&< tm< ti< te< t< uo< t\< tW< tStED$ED$xtJ6xttt&9v< uO}t< uUE+E̋UEED$MЉL$u4$xHxE^< tHEȉEE܍ED$ D$t$<$iM܋x1L$D$E$/\UHR +UT$E)ЉD$U$t`tiD$M $80I1$~[fUWVS|}6l3E̋hppG@EЋVUԋF E؋V$UċFEEЋN0P@9ȉEtCtD$<$M?;MtAXL$EЋP<$D$M2+MV,UȉL$T$<$MTFM@ t`@$aƇXFƒEV;VFu3E̋E@t*D$<$UMdUMrfE̋ED$ ED$Eԉ<$D$MUOM~@EF D$؃D$ FD$E9ED$ED$F(D$ E؉L$<$D$UUM,mVt&EEA t Q89‰UtVE؉+UUU)V(A4UUV$9UsPE@ t`@$u F@ D$E+E؉D$ U؉T$Eԉ<$D$M6MA4@EF v~ D$gt$<$M-WMvU+UP 9MtAXL$Uȉ<$T$7ẺUЋB(|[^_]ÍIƇXt&V(9U؋NsJE@ t`@$u A D$+U؉T$ U؉T$Eԉ<$D$M5MB tA A $MV`MEԋ@ A Eԋ@BUԋ@ B E@ t`@$uI UB FtƇ<$MJỦUD$<$T$'MA%DA~@+t7t.D$D$D$ tD$L$<$ffF9G$xhPփpP<$F,D$6eF0<$D$7ẺUЋ|[^_]ÐD$t$<$MDMƇA6D$<$3w&PL<$D$ +|[^_]ÍL$<$MOMA +BaA .vD$ E+E؉D$U؉<$T$Mhc`D$D$<$E(D$ UT$Eԉ<$D$JMN&D$ +U؉T$U؉<$T$Mb`D$D$<$E'D$ UT$Eԉ<$D$gJM8v$D$D$D$ gD$D$t$<$WMLfUWVS\UeåB:HMЀy yq I@@}̉Eԋ@tuԋN A/<ɍtMԋ@Ey EЋH@EpDt M9H@fMȋEЋ1x L$$U`4D$EЋUH$D$T$UBxMA t`@$u@-|$Eԉ$D$UD$UuЋN$D$#UǂEЋH@EȀ+tMȁIẺB\[^_]f@@^:\[^_]Í&JD1űr ủJDJ MċH BEԍD$ D$uԉ$t$UBUủ}ȉ׃9urxHE@ @ @ D$D$ ?D$Mԉ<$L$UD$ D$Eԉ<$D$A9usMԉA@M̋r +MăM`&@ tP B mvD$ D$Uԉ<$T$F܍t&JD9JDz fuԋN AvL$<$}JuԋUFVvuȁf%$D$rL$UOUL@$D$Uh,UƋEЋH@$D$S1t$uЋUN$D$Q!NUmfǂ9bED$ "D$uԉ$t$UC`U-t&|$Eԉ$D$UMЋ`y x0t\`wD$D$D$D$ D$A0$D$UTUt@ t p1 F[v'UWVSlU`ß:JG t G @ BɉEA EG <t}A<:uXE䍖MQFl[^_]Í&/H9}vUvE䍖f|$4$UȉMMUȋMątPR=F>Ft&|$4$UȉMB?MċUȉNj@<G @L$4$U ?Uȉ&A @L$D$D$ A|$4$UȉM.PUȋMą7BFJl[^_]Ðt&A tA @E-t&AElt&t+|$4$UȉM0UȋMątAjfE:4$,fA @ EEEH:L$D$D$ A|$4$UȉM6OUȋMą&D$rD$4$8JUȋMą 9mD$4$R&A @}u"A tQ UB  4$MTF4D$4$#F0F4FD;FHFDMGU+V EUJ|$D$4$::>F0;F4~4$u,4$8F>~t&}uJQ8t+A E@Ѓ   fD$ D$D$D$D$D$ L$EЉ4$D$S}t&uOAt1Q U܋RUԁ  f E+<|E؉4$D$MMąEU1}܉ljMfD$ |$M܋A 4$D$U#=UȅRM؉JJB1҉s‰E%HIEU䍆F\ t&D$rE؉4$D$UȉM'GUȋMąs}uA tQ R 6 PM.U׃EMĉ‰ $0U-F>tt@}F>f4$ #,v@ fFL@vv@ 80 uD$4$UQU_%A @>@ 80%E؉4$D$8E)1҉uftB9}D$ |$F D$U$:tB<uËB f@uuE䍖pA @D$rE܉4$D$MEMąn PM,MĉE؋A 4$D$eMąExLu1D$ |$F D$M $9t$U؋Ef.9}}uU؉+E䍖D$4$O4$SFDMME}؉M ]E1ҋ}EG Eu\U܋1ҋHM@tE܉4$D$\;‹AE؋I1t|$4$U:;UȋM)щʋM)9/E܉4$D$}1ED$E܉4$D$D$4$OtFPt$t8R}t&E!HuE؉4$$E܉4$D$HEF4}̋}EEE(EF0;F44$S0EE9ED$ UT$M܉4$L$64$EKUЉ4$T${V0V4VD;VHVDE+N  t>D$M̉4$L$1>MtFPt$t8Rl}t&EPuE؉4$#fuU؉'E䍖D$rE4$D$M?@MąP>(E 4$|$Xt&D$|$4$D$4$\9$U)tlj|$4$UV돀t&9  uE؉4$D$MMąE1MfD$ |$U؉4$T$4tPD$ D$D$D$D$D$ D$M܋A 4$D$J19}}|E؉4$D$qU܉E؉T$4$_9ERE܉4$D$GMɉEfD$ 4$IED$4$U؅UE}fEE9ED$ ML$UԋB 4$D$k3D$ ML$NjE܉4$D$K3t4$D$U;4$D$@D$ D$D$D$D$D$ D$EЉ4$D$HUȅ;,&}}v}}WF >4$LVDEE4$D$E܋ }u1vD$ |$U4$T$ 2tMD$ D$D$D$D$D$ D$M؉4$L$G9}}t&4$KVDEU@ 80Q@ 80PRvr}-t&|$4$ 1D$|$4$U UȅuUBD$ 4$#D4$D$yt@ 80vF>Ct@Ѐt 볉D$4$YD뢐&U1҉EOUWVSUJ׉EBD0BDr u+J MBH BE+MEM'/@MD9uHtu;E+ @ 벍t&D$<$C 9ur@uك9usur +=o$D$D$||$D$ D$D$|z(| vE+EvJ\oD$$, Ĝ[^_]Ðt&$D$D$|r=|v$rt&EDƇED$ED$ED$ED$ ED$ED$E$||r D$E$D$|(M|A @MuHpB Ĝ[^_]ËED$ED$ED$ED$ED$ ED$ED$E$| |cE$| |GED$E$| |$ED$ED$E$| |ED$ ED$ED$E$|X |ED$ED$ ED$ED$E$| |ED$ED$ED$ ED$ED$E$| |RuoD$$ Ĝ[^_]Ðt&$L$X/|HUWVS,uFóF>P FEF)PxT$@t$^/`uXPttP$U#D$ UT$E4$D$r%UB @u]UGWF,[^_]Ðt&"tKGWF,[^_]É|$|$D$ 4$>$4$P.fo$~%Lt&'Uuu]EÐ}>AGWF]u}]ÍUuu]CE@}>"GWF]u}]ÍUWVS<DD$ D$D$4$XAE䍃$E,D$D$ ED$E4$D$D$E4$D$6uE<[^_]Ð4$D$B%EE<[^_]Ð&UWVS@`U!}a PLT$ PHT$PD4$T$9`pPLF),F@LZD$4$D$U54$D$RGD$UB4$D$54$D$)GUJ4$M%G M܃D$4$L$lUR F><[^_]f@ HPLT$PHT$ PD4 $D$T$M['`M"F1)|$|$D$ 4$U#UNjF@4$U@U4$U$OGUt%}`D$4$T$MM܋F<[^_]Ðt&B% =D$T$4$PLT$PHT$ PD4 $D$T$M`M"jAL$$!f"|A$ {fJ vRD$4$T$MvMfD$D$4$85t&sAL$$ &Uuu]@ð}>X3GWF]u}]ÍUuu]c@`}>(GWF]u}]ÍUWVS@\U][YEF)'LF@$M D$U4$D$14$D$j GD$4$'*OM4$D$EB GNjE܋$L$ L$ D$L$M$ `Ut$M܅t@tT$D$4$U UB P+lEx4$1!UB|$D$4$My 4$ !UB|$D$4$|$4$EMA |$4$3UBUD$MA4$D$m04$D$ UB+D$MA4$D$404$D$ U܉׃BD$MA4$D$04$D$ U܉B+F><[^_]ÐB% =D$T$4$xT$T$  $D$T$M>`M"'AL$$EOM܉4$fG}t"}[MD$4$T$ E܉F<[^_]Ít&4$;t&|$|$D$ 4$T$ T$$T$9`IE3t&@ iHT$T$  $D$T$M3`Mt"AL$$PEt&"GM܉B MAT$4$D$UC U؀+D$D$D$ tD$T$4$9cD$D$D$ tD$D$4$9G&"A$}EJ VMQD$4$T$ t&D$D$4$.t&D$D$D$ tD$D$4$ 9=&MD$o$UU&U(]9yuu}>F)|$|$D$ 4$vǍGWF]u}]Ð&U(]9Æyuu}>F)|$|$D$ 4$ǍGWF]u}]Ð&U(]9yuu}>8F)|$|$D$ 4$ǍGWF]u}]Ð&U(]8æxuu}>xF)|$|$D$ 4$&ǍGWF]u}]Ð&U(uu]}08-x>@ t)@$F>]u}]D$D$4$(,ƍv'U(uu]}7ýw>@ t)@$X"F>]u}]D$D$4$+ƍv'U(uu]}P7Mw>@ t)@$xF>]u}]D$D$4$H+ƍv'U(uu]}6v>@ t)@$F>]u}]D$D$4$*ƍv'UWVSLuv6svF>@PU}Q$T$ T$$T$G`]F)F@D$4$D$M(4$D$GMЉQGMЋQ4$fU G ŨD$4$҉T$D$MЋA 4$D$'4$D$*F>L[^_]Ðt&P ~D$D$4$@ k@ffU܋ɋEԋEt E9tME܉E܍D$EԉD$E؉T$D$ UT$E܉$M`MS"_F1)T|$|$D$ 4$MMЉNjF@44$M2MЃ&GE4$MvGMЅt}PD$4$T$UFL[^_]Í&P 6D$D$4$P >@ EɋU؋Ut E9tMԍT$U؉T$U܉D$T$ EԉD$U$Ms`M"t 9!L$ED$A$s"P B$UfH @ D$D$4$MM{&H Qf҉T$D$4$UFp&D$D$4$M%MЉEt 9!L$U܍A$T$t&'UWVS@MU }NT$ T$$T$`]F)  F@)7taD$4$D$M4#4$D$GM܉QGM܃ Q4$UAU܉D$4$T$,F><[^_]Ð@ HT$T$  $D$T$M%`M"F1) |$|$D$ 4$MM܉NjF@4$Mk.M܃GE4$MIGM܅t}MD$4$T$UF<[^_]fB% =D$T$4$p T$T$  $D$T$M`M"AL$$&"A$fJ fQD$4$T$1 D$D$4$" t&AL$$*6&UWVS@JU}K,T$T$ T$|$T$`F)F@UD$4$D$M4$D$TGM܉QHGM܋Q4$UG U؃D$4$T$M܋Q 4$UU؉D$4$T$F><[^_]Í@ 1@E@ @HT$T$T$|D$T$ E $D$M`M"eUAL$$T$ {t&GE4$MGM܅t}JPD$4$T$UF<[^_]Ít&4$Mq*M܃:&|$|$D$ 4$Ma M܉vB% =D$T$4$T$T$T$ | $D$T$M`MT"u%AL$$ Bv"& 1ɋ@%@J NQ D$4$T$AD$D$4$E@ D$D$4$ &A$ vUWVS\}6*3jG7@UԋG)'}G}HPpT$PlT$ PhT$PdP$T$`ZHlRG@aD$<$D$M<$D$RFMȉQFFMȋQ<$U F UăD$<$T$MȋA EЉ<$ UЉD$<$T$MȋQR H}ԉ:fD$ EЃD$D$Uԉ$I% UԋB)|$|$D$ $/ 럍&@ @EЋP UT$D$<$PME̋PpT$PlT$PhT$PdPD$ T$EЉL$D$Ủ${`"yEЉD$ ED$U̍CA$T$q}ԋG7\[^_]Ít&FEЉ<$M FMȅt}GXD$<$T$BUЋG\[^_]Ít&<$M%Mȃ&t$t$D$ <$}GB% =D$T$<$PpT$PlT$PhT$ PdP $D$T$M`M"u"QAL$$+"&O1ɋ@%@JM@ Et&J EQI T$D$<$L$ UЋGt&D$D$<$E[_A$j&U8uu]}%}eFDV8FDFH ~ U|$T$ @4$%D$P tuKzrD$ED$ 4$D$FUB @u=UGWF]u}]Ít&D$E4$D$iUB @tÉT$4$D 뵍F> U8uu]}$}dFDV8FDFH ~ U|$T$ @4$%D$`t?D$E4$D$UB @u;UGWF]u}]ÍGWF؍vT$4$X 뷍v'UWVS=<t^Mԉ|$D$4$L$ sD$E4$D$UB @t T$4$ MGOF<[^_]fMԉ|$4$L$ 뤍Uԉ|$4$T$넍Eԉ|$4$D$iavU8uu]}"ÍbF>P F$ER 4$D$ED$UB @uBF)|$|$D$ 4$NjUGWF]u}]ÐT$4$ 밍v'UWVSP FEԍE$F@@ @$E$uE+E4$D$EԉD$ UB @u?F)|$|$D$ 4$NjUԍGWF<[^_]ÍvT$4$ fD$D$4$P`&vWt&'U8uu]} `F>P FE@ @$R‹F)~Zx>ET$4$D$UB @~UGWF]u}]ÐGWFݍv|$|$UD$ 4$U넍D$D$4$@Q&T$4$hq&UWVS\u_N>A@ @EUAf%f=2$(D$cG(F@3F)F0;F8BlD$ D$BD$BD$B D$BD$ B4$D$oD$4$D$F>\[^_]ÍvtF)#F0 ;F8 4$UԉMGMЉD$4$L$UԋJ4$MGMЉD$4$L$UԋJ4$MG MЉD$4$L$UԋJ 4$MGMЉD$4$L$xUԋJ4$MgGMЉD$4$L$QUԋJ4$M@GMЉD$4$L$*UԋJ4$MGMЉD$4$L$UԋJ4$MG MЃ$D$4$L$UԋR 4$UUԉD$4$T$hf4$UUԃ&UTD$Uԉ$ZTbt&D$D$4$Nt&D$4$UUԅb8|$|$D$ 4$UUԉNjF0;F8)믍&GWF\[^_]Ðt&1U$UNUg&D$ 4$UIU^t&|$|$D$ 4$UqUԉ%t&'UWVS,uÓ[>F)) $Gۆ ۆPE4$]GE\$D$4$RFPtt&U,[^_]Í4$ۆ$ۆP4$]UBE\$D$4$ۆ(ۆP4$]PUBE\$D$4$ۆ,ۆPE 4$]UE\$D$4$FU,[^_]Ít&|$|$D$ 4$UWVSP FWEU@ PG@ tZ@T$$ 4$D$ED$UB @t T$4$EGUF]u}]Ít&UD$D$4$] U돍t&D$D$4$@ b'UWVS,uWFNx @<U@ HU@ }@+uGL$$|$4$D$G @t |$4$E8F,[^_]ÍoE܉MT$D$4$ME둉MD$D$4$= MiD$D$4$ 9t&UD$|$4$MUG @u F)Ѓ~.B1ɉE1z t&|$4$Uύ&T$T$D$ 4$붍t&U8uu]}@=VVF>J E1Bt@ t@$.4$D$ED$UB @uFF)|$|$D$ 4$NjUGWF]u}]Ðt&T$4$ fD$D$4$ m&U8uu]}`]UF>P FE4$D$ED$UB @uAF)|$|$D$ 4$NjUGWF]u}]ÉT$4$`fUWVSLuTEԋFDV8FDF@ ~ +N U+WM܃4$} UԋM9M%MUM~ π+D$4$~F@@]E)Uԋ4$D$@ @ D$ D$D$4$}~ D$E4$D$ZUB @F)|$|$D$ 4$KNjUGWFL[^_]ÉUD$ "D$D$4$2U܀9@ uv빍MfvED$D$|$D$ D$4$t&T$4$`&UԍGD$D$D$T$ G4$D$GvˤD$D$4$/D$ D$D$4$0Y UWVS|u30RFDN +V FDFP F+t?4$ 91vV +AD$4$E؉$8 $t܅LD$ D$D$4$pT$ D$D$4$HM䉍vD$ |$4$D$NP8t΋D$4$L$D$4$D$džDdž@4$1(F ҉Ecf)D$>D$E؉$ǃvԋE؋${UdžDdž@D$ "D$D$4$9@ u뾋~ D$L$4$@ @2F)WOt"E؉$E܉$F|[^_]fE؋$@D$4$T$_A @+V)ƒD$ D$D$4$>PHeE܉$A$oD$D$4$R|$|$D$ 4$D$4$&D$4$T$:D$4$L$ MDRωȃ%!ЍW~ ɺx1 Љ@&t&L$4$6D$4$A[t&E؉$(ED$D$$F@@uY+E܋D$D$L$T$4$D$ $+T$U܃L$ D$T$B4$D$>뵋}܋4$D$u@ t"@ |$D$4$T$ vD$ D$D$4$ ÍvUWVSLu& #LEȋFP FUȉEċU@ X@EЋUȋB@  @EԍEE\uIUЋẺ4$T$ UԉD$T$/u@38Htĉ4$fUЉD$Eԉ4$T$ D$DžED‰U!Uԃ~^ MԄyR щ@Eĉ|$4$D$UB @t T$4$nEȋUĉPEFL[^_]Í&1몍t&D$D$4$Et&D$D$4$Et&džDdž@U UWVSP FEF)~`D$4$tnET$4$D$UB @uBUGWF]u}]Ðt&|$|$D$ 4$넍t&T$4$xfUD$D$ D$D$4$'UX@ `UMcM܉D$A 4$D$M܋A HUF>*t&U8uu]}@=GE8t  |$4$N@ Ptp@$tgU$Ux-@$UF]u}]Ðt&@$Nu D$4$dt͋G @ tNj@D$4$D$ rD$뙋G 'P2t&U8uu]} FE8t  |$4$.@ @t0@$t'$UF]u}]D$4$t2G @ tNj@D$4$D$ rD$ 8u 눐G O@Zf=t&'UWVS,u&#E>W@ @EUt  |$4$@ @t;@$t2U$T$E䍖MQF,[^_]fD$4$dt2G @ tNj@D$4$D$ sD$u E䍖넍vUD$D$4$eU܉EG @ft&'UWVS,uCEFP FUE:t  |$4$@ @tT@$tK$gD$E4$D$UB @uEUF,[^_]ÉT$4$fD$4$t2G @ tNj@D$4$D$ LsD$.u U䍆F,[^_]Í&G @t&UWVS@Et y L$4$MM܋@ @EUP$t&L$$D$tR}8臿u VBGWF<[^_]ÍvtD$D$4$M‹@Qu +u[F)~)T$4$N}UP$|$|$D$ 4$UU܉뵍T$D$D$D$ tD$4$UUn4$lV><[^_]ËF><[^_]Ð4$W@ @ EUt  #|$4$@ HBMD$4$]M܄uRB$tM܉$M܋EU܉$U܅B$taE䍖MQF,[^_]ËG @ tNj@MD$4$D$ sD$/Mqvu E䍖댐UD$ "D$D$4$U܉EG HBB t&UWVSF>P FEԋ@ @ER v |/E+uj$U34$D$EԉD${EԋU@ @u#Eԉ}t$\F><[^_]ÐD$4$0U̍&oỦD$D$4$UqvUT$D$ "D$4$1‹E,v UfEv Q/tUЉD$4$T$Et&'UWVSH U@E~@ @EЋ@ @ER v |/E+upEЉ$UȉD$肼4$D$EԉD$EԋU@ @u"Eԉ}t$F><[^_]ÉD$4$U͍&oUȉD$D$4$UkvUT$D$ "D$4$‹E&vD$D$4$Et& UfEv Q/tỦD$4$T$Et&'UWVS<ueE185;F>P FƆ@ @ L$D$$‹F)~txXT$ L$4$T$@ @GWFUe3<[^_]ÍGWFЍv|$|$D$ 4$[&D$ "D$D$4$&D$4$xI2fUWVSH UHWU@ @ E܋G@ @ +ueU܉$T$>D$E4$D$UB @t T$4$EGUF<[^_]Ðt&EԉMD$4$T$M؋EԁrU܉$T$m&MD$ "D$D$4$MMD$ "D$D$4$]M؉EUWVS,ufc8F>P FWEU@ H G@ @ +uRL$$4$D$ED$蒷UB @t T$4$mEGUF,[^_]ÐoE؉M܉T$D$4$M܋E놉MD$ "D$D$4$]MVD$ "D$D$4$8"t&U8uu]}@=7FH F<@ @ +uUU$n|$4$D$艶UG @t|$4$dU:F]u}]Í&oEUL$D$4$UE냉UD$ D$D$4$MUS'UWVS,uVS6FDV8FDFH ~ U|$T$ @4$%D$M4$L$D$蓵E@ @u>V)D$ |$|$4$MPHF,[^_]fD$4$0fUWVSluÓ5EVFJ <BP RoT$D$ D$D$ D$D$D$ D$4$UU؅VRM@ H 1pfMMzHʁtP UċRUH  1Ҁ9+z D$ 4$UU؄ñ D$|$4$詳G @KEMyFl[^_]у Uƒ}'c1Zt&D$ "D$D$4$ t&oD$D$4$U؉MMԋUt&B @EA$tND$4$$ND$|$4$蹲G @uOEUzFl[^_]Ít&AD$4$m$D$v|$4$Hf|$4$8& $DD$afU UUă}t&F@D$T$4$%D$ D$4$@ PD$ 4$UU؄衯 D$fD$ D$D$4$@t&D$ "D$D$4$1҉9vsT$4$E臰EvF@%D$ ET$4$D$NoD$ D$D$ D$D$D$ D$T$4$ D$|$4$蒰G @u>EMy+oT$D$4$EE|$4$2봍t&UWVSlueE1Å0V>Bt1 HI>BRF!F)9XdžD$ D$4$D$t x D$ 4$tvv!&@t&G|$|$D$ 4$t&@ P@$I@4$D$L$$D$|%=@@4$D$[@4$D$6@4$D$@4$D$4Džv%=@uF@f%f=GWFvsD$4$"ƒ @9F@f%f=8GWFfR묐1뙍H I t&,@ 80fD$ "D$T$4$8a& ɈxD$4$HV&T$4$&D$ 4$a@ t|@ D$ $u:pwD$ D$ 4$D$@$;D$@$D$ "D$D$4$fSUWVS,u'V>Bt1HI>BtgRF1҅t x t,B<?ftHB 0 aGWF,[^_]ÍvB< St B x tuT$D$ D$4$U_U_vu3J ȃ>,[^_]ËHt&1 @ @@D$4$$EGWF,[^_]ÍJ fAT$D$ "D$4$0 D$ D$$aoЃ18t&GWFm@ 80fD$4$V&U]if%uu4$x0%=t>BJF]u]ÐBJF]u]ÍvBJF]u]Ít&'U(uu]}ý$V>Bt-PtfR>4$_F@%- v[BJF]u}]ÍvuC ЃtV>뿍&Hrt&@Ѝt&t̋@ 80뽐BJFp;|KBJF@ ԍt&%=f붍%= f떍%=`fsv%=fSv%=@f3v%=_fvH;x+vvD$4$x&fUXuu]} "Fxf@t1 A@#4$貥t}F~}H Mn~l}O}f]u}]Í&u{: ȃYF뷍&}u}߮\$U|$4$UG @EԃFhH똍t&BJFDtA 80jۆ4ۆMԉU4$سpuL$\$}ԋUG @v|$4$UbfBJFۆ4ۆfۆ4ۆfUL$4$=Ut&UWVSJt@E@EOEEx@E>R%E-wsrrUEEqtd@ S@ U$T$RF><[^_]Ív1҃EEu4$U̢>U܅҉D$ T$E4$D$莹GWF느t&U$T$ XF><[^_]ÐEu?EEE E><[^_]ÍvE@ڐGWFD$ D$D$4$UUF>t&GWFiE@ 80P&U4$T$MVM܄'UWVSLuFCF>@HV@ f%f=9XtGfdžD$ D$4$D$U U؅t z 6Z F@tMt%4$UOU؃t#F)4ҍuF>L[^_]ËQUKEQ URUāhUĉUă}uc@1ҋMf%f= AD$4$U<L$D$$UEsA D$4$D$^VdžBf%fBf%f=T@ l@ T$D$$3ID$ 4$@ @@ D$ $芣~vD$ D$ 4$D$θ1v1F)9HF0;F8b4$UGU؉D$4$T$י4$UƼGU؉D$4$T$谙4$U蟼G U؉D$4$T$Y4$UxGU؉D$4$T$24$UQGU؉D$4$T$ 4$U*GU؉D$4$T$4$UGU؉D$4$T$߮4$]ܻG E\$D$4$F4$U赻G$U؉D$4$T$蟘4$U莻G(U؉D$4$T$x4$UgG,U؉D$4$T$Q4$U@G0U؃4D$4$T$4$UU؉D$4$T$ѫF>L[^_]ÍX9D$4$U U؄ҍtB @ r@D$ pD$D$4$UUU Uʃ}t&D$ "D$D$4$xv&UĉUă @Uf%f=[#vdžD$ 4$UU؄1|$|$D$ 4$UѷU؉vD$ "D$L$4$o&@ @ T$D$$oA$=D$4$UZB Ht&F@f%tz t 1T$D$ L$4$1J tًIՍT$ |$|$4$UͶU؉&T$4$`&D$ "D$D$4$&f$tD$4$&D$ "D$D$4$QUWVS@U@ @EȋO@ f@E̋Mԅt  |$4$UP FWE@ @E܋Ut  |$4$@ Ptt@tkD$4$U܉T$$<D$M4$L$E@ @uEMUJF,[^_]ÐD$4$fD$4$UU؄uv譌 EMQF,[^_]fD$D$4$UU؉EG Pt&F@T$|$4$%D$ et&'UWVSLueE1XUVJ VDžxtkt z D$4$t2F@f%t z 1D$ L$T$4$GR QFUe3VL[^_]ÍB XHM@@ |$4$m@ @@D$4$莳T$L$$貤(BtD$|$4$qD$$ B:D$ $G @PsPH ;<D$$D$迾4$D$ L$D$)B @t T$4$a T$4$耧P tT$4$ePx  $IW R҉2&J aIfYvtUXuu]} z tu!BJF]u}]ÐGE%=uEЉEă vD$4$D$o볐AE%=uEԃ wÃ} ỦMȉ|$4$蒫MȋŰ@ @EЀy mL$ỦMȉ4$gMȋŰ@ @EԋEЋ@t ỦMD$|$4$貉MȋŰ}ԋxtUD$L$4$艉U̍EỦ$ȿU̅EЋ8D$E$GMԍ9D$E$G }ЋHH MԋH H@P<}ԋ@P>MЋŰ@I E1;<UD$L$$蹻E1;<D$L$$藻U̍BJFA @EuG ?@ER,D$4$TŰ}ԋ@ t*ỦD$4$6UqEỦ$0UʋEỦ$UH'UWVS,u&#>W@ @EUt[ |$4$@ Pt=@t4D$4$JUT$$x:E䍖8t&1҉UD$4$_U܄ut E䍖MQF,[^_]ÉUD$D$4$腻U܉E.G 4P?f"vF@T$|$4$%D$ tgvUWVSWU@ }E fEm}mrEFxMԋMO%=t)G Eԋ@Ѓ+ UȋM̉<$T$L$~xYEUJF\[^_]Ðt&D$4$&PPtx tuMЋu UЍE땍&|$D$ "D$4$谲+=3pD$D$4$跅@ t@Ev+UԋxY|$4$讃|$4$UȋM̉T$L$$ܚvED$ D$EG4$D$tvЍBEEԃ}8t&3pD$D$4$ʄ;'UHuu]}蠲Ý>EԋHщЃ Uʃ߁qtcu#F>]u}]Í&D$Eԉ4$D$辟t@t=D$4$벍&U wMԋQ R҉UtJzt&UԉM܉4$T$袯4$D$~M;AY뗍U8uu]}萱ÍFV>H @ tz tF>]u}]ÍvB Et@Et@ unUtUBt@tM܉D$4$艗M܉4$L$D$pMA @F>fGWFhU؉MD$qD$4$:U؋M܅EVD;VHVDG+N  V)ƒ~LUxB>4$3@uV@tz tNF)D$T$4$nF>,[^_]f멐B tHtA tL$D$q4$U܉M~U܋MEsFD;FHFD+V F)UB>4$vI4$D$D$4$F,[^_]Ív"t&|$|$D$ 4$UU܉v|$|$D$ 4$MMTv4$M FDM#fL$4$谫4$D$z-vUWVSlu趭óz@ @E̋RGB }U޶ fUm}mދ}8Mxt Ex F@f%f=M̉L$UԋEЉT$ D$U4$T$F zrD$ D$4$ZOD$4$MyGMċFl[^_]Í&T$4$E}ED$D$4$U͠UĉE@ "HA  L$D$q4$MՙMąEFD;FHFD+V F)YUȃBF)W4$UnGm\$D$4$؎FU)ЃT$T$D$ 4$S‰4$zU#UĉBM̉D$4$L$ k>4$PCp4$D$D$Ƒ4$辇Fl[^_]Ðt&E̍OD$UԋEЉT$ D$U4$T$MiMĄ(EUm\$4$/|$|$D$ 4$l|$|$D$ 4$MIMĉvOG&v4$MiFDM)fL$4$4$D$$w3vUWVSH @ u]8tz t]T$4$MREUm\$Mԉ4$L$֌MA @GOF<[^_]Ë8뜍vB t@Et@ tD$qD$4$UЉMUЋMԅEaFD;FHFD+V F)~hU؃B>4$Hp4$D$D$e4$]F<[^_]Ít&L$4$PMt&|$|$D$ 4$\y4$謥FDTE܉4$D$U4$D$iuY&UWVS\uQNF>@~@ ,P@ @EЋOM@ IM@ D$$D$ D$T$UD$L$ D$T$Mԉ4$L$ju"GWF\[^_]Í&UԋB @@(GWF\[^_]ÍvD$D$4$U腛ỦE&ML$D$ "D$4$UMU&D$D$4$0'UWVS\uƦF>@u.x8u)F>\[^_]Ë҉8t׋B< t"T$4$lu뾍&B t׋HtA tʉL$D$q4$U؉M趓U؋M܅EtFD;FHFDc+V F)UB>4$貝κ4$D$D$(4$ F\[^_]Í&\@ P ҉8B< J ɉMIɉM MԃyAQt(MAiD$4$UIfU؅T$4$U?sU؅GWFX|$|$D$ 4$M聅M܉vL$4$舢4$D$qv4$M詡FDMM@(Ƈ`QL$T$D$$D$ D$D$D$D$D$ 4$U؉MgU؋M܋B EEtaD$ L$D$4$+U؋B @ @lD$4$UZU؋BUT$4$U耈U؋@ @zL$D$4$U MU뙐t&UWVSuspEȋVDNVDVR F +~ MċVJPUԋPfu8EE$覚~ GWFČ[^_]Ðfu z Ґt&tEԃEEԋ@UMEM`EUMz ttEt&D$ 4$UYUt3M̅M̋@ D$ L$T$4$ϔU EB t@EtExxxP<nE@ ‹@EEB EЋU1B t`@$ÜE@$M臊M0E@ EfMUA@ [@E9U B@ RU؋@ EEM̉Eȋ@4$D$U讇UT$UT$MԉL$ UȉT$MЉ$L$CkN }MtEЉD$EЉ4$D$U$E[ED$Mĉ4$L$E`E@ @t D$4$ UԋMčHPFČ[^_]Ív}EE܍ED$ E܉D$EЉ4$D$M]M}SEЋE܋UЉEU&B 6@E(@ D$qD$4$UMwUMEEȃ9EFD;FHFD Mԉ8MЋV AlD4$lMp4$D$D$4${EF PHFČ[^_]Ít&ED$ "D$Uԉ4$T$MMEЋEE(}MME9EU11ɉUU);UvU}E'L$MЉ4$L$UrUEЉT$D$4$r+UЋM̋@4$D$UUT$UЉ$T$vh^t&M̋U@4$D$U„MԉL$ UT$UЉ$T$et&D$D$4$UEUEMȋF)ȃT$4$赂MȃEԉ4$MQUȉBUԉD$4$T$8]MfU؉T$D$ D$4$QU؉E+fMmMԋA t A @ Uԉ4$T$g]E3vD$ L$L$4$U}UE%fED$UЉ4$T$kMEEЉEDMUA@ @E9UB@ H;M}UtM $cpD$4$3`^fF@%D$ ẺT$4$D$蹎EẺ4$D$U4$D$hUnf4$ FD?D$D$4$UUD$D$4$t&;EMEԋ@ EtEԋ@ @ E؉U؉M܉D$ E܉D$Eԉ4$D$UUЋUEED$EЉ4$D$jE&E$角SpD$4$^U${11VBf%f=it"D$ND$4$ T$4$| UWVSEeU1wt@DW 0GDw )GOx ~N@f%f=taf=t[ukPHBMe3  Ĝ[^_]Í&tx wG<.F~@ @V19vG@  p DžD$ 4$˔u Q F@|$4$%D$ D$1븋D$D$$ό*D$D$ |$$wG @G @@${`@$eB% )=  D$<$L$NjH DžO B@f%f=A t`@$@ 0@11Džt&L19A CI ~9HAf%f=t$L$ AD$ $hZw+H H@ IH_DH`A$9stt(19ƅvR1) 9sЋ)։+q ƅA699++q 뭍vq $]wx9q vp vD$L$$ڃt&AD$ $zt$ $D$ ft&)D$D$ $`'AD$ $g{xP>nW B% =@z `@$uDžA Džt$D$ ${pD$D$4$Dp"D$ D$<$L$qFB@h@Qu+bp T$L$$QG @t|$$zHPF%`@$k9C@)Ѝ40@ P B T$D$q $ GD;GHGD+O AF4$ypD$D$4$tw4$lm F PHFDž9P H @D$$wT$|$t$ L$T$$覊PQ @Q_ЀDA@?@Qu+p |$T$ $D$ nF~Bt$|$4$c)@DD$D$ $脃9D$$w{ D AD$D$D$ tD$t$ $蠍@z D$ t$L$<$rFL$$NG GSpD$4$QJL$T$<$z}VD$D$D$ tD$|$4$豌gt$$4vT$<$s<$D$ZcQF<$dGDcpD$ $PSD$$t*D$ t$|$$eQ 6U(uu ]賌ð}}tF@t D$<$L@]u}] UWVS\uVSE؋FD8FD~ +V U܋F@@z D$4$U=tUĀz D$ 4$UĉM訇UċMMRI Mt&L$4$KE܍F HPF\[^_]Ë@Wt&B Y@EK@ AD$qD$4$UxUąEN E܍9VD;VHVDuG+F UЋB<U؉4$~p4$D$D$7q4$/g}܋F F\[^_]ÐF+E؃ E؍zE)HMm؃4݃<D$|$$xEfB ;@E-EЋ@ EGW@T$ U؉L$4$)|$Mt}ԉ|$M4$L$[MUЋ@Qt|$4$YML$4$IE܍F HPF\[^_]Ít&D$4$UĉMʂUċMG+:cD$D$4$[MUD$4$U1qUĉF@D$T$4$%D$ C{M&Eԉ4$D$u4$D$U4$蜅VD{D$ U؉4$T$T$MiM)ʃEV t&D$4$UĉMUċM^}Ћ@t D$ |$T$4$zM2D$4$UĉM趃UċMF@%D$ EЉT$4$D$5zMxD$$v'UWVS,@mj@t1Ƀtt 4$hM4$F4D$4$ NF0hMF4B;BBhBBf+V P`PVD+V@P VP0HxPU@8@0P@҉P VLtBU P8\4$D$!D$kn@0@ @\@ 4$FED$`@ ,[^_]Ít&UM4$UBMt&'UWVSluE܋hUJωMzGEԋP R҉U Q ҉UA4EЋHU؋U;P@E;Py<AQhHEP U؋UЅK}Љu܋U؉΃vPD$ $Muމu܋y,~ỦT$84$D$-WEA0A4U@,PHHQx<5G P@< FD$Mԉ $ l[^_]ËA8Q@Mԋ@4$D$pD$-4$D$QQD$ D$4$ljD$R)@ @E|$4$UIIUȉB8U@8&D$ D$D$4$PRMP0P4hEP׉UxUEPG`G F@FDGFG0G 4$D$]G 4$D$C4$_MB EHEMB4+A@B4pE؉D$H4$D$;Uu+U܍M܃ALHG8l[^_]ËH@@H@HH BU@QU܍M܃A딐t&҉uZM+M؋xHẺD$H4$D$U{THxUȉT$H4$D$G?HM@4)B@EQ4UЋEЅy,fT$4$}4$D$NM؉4$L$ Rt&D$4$}xpD$D$4$_Y@ HMP8t5V)ƒ~;t tQPHF<[^_]ÍV@)ƒD$ D$D$4$_뫍W tJɉMtMHDt[Q RtY A< u!`QF<$D$*<[^_]fT$4$@z4$D$KM‹뾍&뤍t&4$MaD$D$ M4$ljL$D$XG t*G t8u>pD$4$A&D$ "D$|$4$|fD$pD$4$At&UWVS\u}ýFV>H U@uzPEtyz ET$4$UCU؄EtGMH: GWF\[^_]ÐEuD$ 4$UxU؄tF@%D$ ET$4$D$go느B F@E?@ 5D$qD$4$U:jU؅F@Et)EtEt4$M$]MԉEFD;FHFD+V F)A>4$sUqD$4$T$qb4$iXU>u<;Et5D$D$ M܉4$L$nZE@ @tD$4$9dt&F>\[^_]Ð|$|$D$ 4$M9\MԉKv$ƆD$D$ M܉4$L$UZE܋U؋H B @@$MBZMԈU؋B @@$cU؅M܋I M  MvJE܃M9H ML$ ED$B @@4$D$OMM܋BU܋B BxP>f*U܋B@uSU܍GWF%4$MawFDMfE4$D$x4$D$GM܉4$L$b뜉L$M܉4$L$UmiE܋U؋@ EUWVSLuyӹFV>H 1ɉUxt@B @ t‹EԋEEԋ@D$D$D$ Eԋ@U؉M܉4$D$ EԃD$ED$dU؋M܅t9F)GM܉T$E4$v4$D$EGM܅t$y tWL$M܉4$ZM܉L$4$=SEFL[^_]Í&F)~VGE䍆G뤐t&A txu뙉|$|$U؉MD$ 4$&YM܋U؉=t&|$|$MD$ 4$XM܉눍D$D$ @4$D$ED$SREM@ @uF)~)GEEGD$4$``Mԍ&|$|$MD$ 4$iXM܉뵍UWVS}wË qEGP GUEMEUE|G<puF+ H1;E uE׋U耉EEЃ)ЋU)EH.„EUMоM}E|G<6f<H/;P G EA9M9} }EMuEfUԋM}D$ E؉T$L$UD$E$ZU҉t UD@ @ut1EtUD@ @tMD$<$5^MuϋUL$<$T$*5MA @UEuPGP7Č[^_]fG f@M$UD$|$m3GU@;EEt&O Ag11Ҟw6}Eƴ fEmUmƋUUE؋tum]mƋM؉UUMUt&<$ru8Et1EEسtu<$]VE\$D$<$'WGv$UD$ oUG% =$UD$ D$|$RU@vL$<$ \&P BET$U|$$bUHt&D$<$n&M$D$ L$UQU/,$D$D$6UWVSLur>EW)qU؋O D$ D$ D$Mԉ4$=oD$4$E܉D$MZL$MD$ D$4$EmUЋM̅E+4$/jFD;FHFDq+V F)E܍WGM؉OE@ xzUЉ4$yTUЉBD$D$4$/EUGWMD$A @4$D$P>4$D$_uqVD;VHVDG+F E܉U؉W4$SGD$D$4$DMG O UD$B @4$D$O>4$D$D_uL4$xMF>L[^_]Ðt&zUЉ4$vSUЉBD$BD$4$,DvMD$P4$L$6D$D$D$ P4$D$EԉD$`ok&EUD$4$D$dUЅN|$|$D$ 4$P>5qD$UЉM̉4$1M̋UЋ>D$ L$T$4$BkEDqD$4$3t&4$lFD4$lVD+UWVS\uoÓ>EPʉȃ M܉у߁qȁMu4UM4$T$L$4GWF\[^_]ÍvEL$4$D$\Et@P t[qD$ D$@UЉ4$D$jUЅEt x z\UD$+4$ijUЄ>BD$+4$D$ tD$LM܃ MQ R҉URt&@ @EmFDE;FHFD7Eĉ+N F)E܃HF)BWUЉ4$EKPGM܉D$4$L$5-UЉ4$xeED$4$D$K4$I>"M4$L$-k4$D$A:U|$|$UD$ 4$MUЉ4v|$|$UD$ 4$MUЉ-MUЉ4$L$j4$D$9UЉUЉ4$iFDUЉEF>&'UWVSlulÃEЋFDV 8FD~ UċOWM̋I  tqEqMȋE)EԋB4$D$UNZUB@ HMB@ D$ L$D$4$U`UVD$ MȉD$4$L$gUE-4$chP ;BB@dM+N H@ EЉF MЋ@ F@ hVDd;VHVD+M V)9UUUԅt'M1҉uЍttuMԋuЍD$UB @4$D$I Mԋh@d+V QR V  I N IhdEԉ4$D$}XtOUT$M̉4$L$/EԋU9P D$D$MD$L$ Ẻ4$D$h4$bFU+}ă~ GWFl[^_]Ðt&aq EPMx _D$Ẻ4$D$UfUMDvBP„D$ Eȉ4$D$tD$-l[^_]Í4$ ahP BB@dM+N H@ EЉF MЋ@ F@ hVDd;VHVD+M V)9UMԅt"M1҉uАttuMԋuЍD$Eȉ4$D$NE̋H AfE̍jqEqEt&ML$D$ D$4$UfMU&jt&P BKUԉD$D$4$T$ EHt&UԉD$D$4$T$ %Ht&B 11D$D$ 4$c‹hBhP 4$E)dN VDEMD$D$ 4$pc‹hBhP 4$EcN VDEM4$UM==MAM̋UA @uTtx t<4$]DT$$,)D$4$?uD$4$\@ @t@ u믉'UWVS\ufF>@1҃tt y F)t y TEt&D$ 4$MyaMԄt#F@%D$ UL$4$T$W # GWF\[^_]Ðt&A e@EW@ MD$qD$4$U؉MRU؋MԅE"FD;FHFD@+N F)XMA҉tF)[>4$\~q4$D$D$J4$@F\[^_]Ðt&A @E@E>1T$4$UOU؅҉Et B  z |$M܉L$ U@PD$M4$L$At4EB tF;BtA|$M܉L$ RPD$4$T$AuHPF\[^_]ÐPHF)|$|$D$ 4$UDU؉v|$|$D$ 4$UCU؉v|$|$D$ 4$U؉MCMԋU؉3t&D$ "D$T$4$at&E4$D$U`4$D$/Uf4$U_FDUfUWVS,ubÃFV>H U@@ @$n;+uiD$E4$D$!UB @u=F)|$|$D$ 4$BNjUGWF,[^_]ÐT$4$`JfqET$D$4$3ErvD$D$4$UB&$:¸*$U:U&UWVSluFaCEԋFDV 8FD~ UȋFP FE̍GEЋOy 3A Pty`Q@$t`D$4$UM\UMt@A @ @D$4$D$ LuD$UM>MUB E9E\EЋ@ RU@ EċE+ED$$ED$D$D$D$ D$T$ EĉL$4$D$"+}ȃ~  oGWFfD$4$D$#l[^_]Ít&T$D$q4$UM"MUM@=GFD;FHFD+~ 8Uԉ4$/WD4$D$D$E4$;Fl[^_]Ít&A tL$4$MM=M@ t&D$Ủ4$T$cE@ @U̍GWFt&UT$D$ "D$4$M^]UME(t&D$Ẻ4$D$UB @tT$4$Ff4$T[FDT$4$\4$D$+vUD$4$F=&UWVS\u]FD8FD~ )F9WEuH@EG EԋUԅt*Et#uM|$4$D$I!\[^_]Ðt&lR z3}uUG EԀ}tU}9tD$ |$T$4$;4$D$ \[^_]Ðt&B EԀ}uB<t#@EB t M qD$ D$D$4$Yt&FP FL$|$ D$T$4$Uo"UB @EB EԍOEfT$D$4$UȉMj9MĀ}U y qD$T$D$D$ 4$U'UȋB&ED$ "D$|$4$M^ZMEEvET$D$ "D$4$U.ZUȉE&T$4$UȉMjIUȅqD$ D$B @4$D$YVE`D$@ 4$D$1M4$D$'E̋`@4$D$S4$D$'MċUȉEЋF)ȃ FD;FHFD+~ 8A Q}̉y}Љy D$MԋA @4$D$U8D$ L$Uȉ4$T$8t&J A:ET$D$ "D$4$UXU&L$L$D$ 4$v:Uȉ"4$UȉMVFDMċU 'UWVSLuvYsVD>VDF )ƒ9B @EB tMuslt:A B<MET$UD$ "D$4$WUԅtMu$qD$ D$D$4$JUuMD$4$T$F>L[^_]Í&ET$UD$ "D$4$6WU(fVJ V|$D$ EЉT$UԉL$4$LEЋUԍxf 1Iu EB fqT$UD$D$ D$4$ $UB @붍vT$UD$4$ 5UԋBF)~9D$ |$|$4$8؍&'USEHWEPJP8$-[]Ít&'UWVSUzEF8<[^_]UWVS\ueE1hUeFVH σB *R @Džt8Džt)Džt4$5+Fq@u !T$4$L$ D$4$(t 8t&D$O4$tUe3$\[^_]Ðt&1ƍt&džDdž@uF룍vqD$D$4$$9t&T$D$ "D$4$P‹FfD$ 4$T$D$XfD$ |$4$L$&$ދgv4$LI4D$4$4D$4$D$ D$Z0@T$t$<$D$ Au݉4$Y-F)~[+D$D$D$ tD$L$4${Ofdž@|$|$D$ 4$1UWVS\uFPC>OM؉EFEPEĀt)EtEt4$0EċFEPff t fUEEE4$D$}ĀEąFVH @ Jz @(kH$9Mt"tL$4$UUЋMAH$F>\[^_]Ðt&fEfM҉UUM܅H@ ]MԋFQ x _F>\[^_]ÍM~BEԋR1t L$4$3}ԋMM+U)lj9}؉>D$M4$L$tsM܋>uBEu >ύ&>T$E4$D$?:N‹)~ExP>뛍vT$4$U5UЉF)~:뙍vF\[^_]ÍvD$ D$D$4$U.U뛉|$|$D$ 4$Ma.M̋UЉ롍v@}E1zRtE4$D$My2M)ljD$ M؉4$L$L$-Et&@E@ !EAEI1tM4$L$U2UЋM)T$L$4$Ut UB @T$4$K5Uy&M؋F\[^_]Í4$(tFEB$FfT$D$ 4$U)D$D$D$ kD$UЉ4$T$KUf4$UY(UЅt&D$PD$4$U}91ɋUЅ}؉ωuuUt&D$t$E$uU܋}؋ufUWVS|EKÃ}9EMD$EMD$ <$D$*UMB 6u@Ev UBu% =t%MD$ D$T$<$)MuA @EQ ŰEE@ t`@$EA t~`@$ur}0 EMt$D$ D$<$GD$<$ED$ uMF CŰ@EԉEv EUEuvEUEUԋỦU9EvEԋUUԉPEP_DP}t9E9EƒDu  f UR UEUԋ9P sCT$UM<$T$8UEUԋ@D$)ET$$M} [Er}rUEUEԍDUEЋU9P GEU9ER E9E} \UE]Eԅ M܋UMȋM }Љu fEԅEȋMԉU|$D$ EЉL$D$i$/Mȉt$D$iL$ MЉEċE)Eԉ $NjẺD$q/M܋UM3E)ΉT$D$ED$ $ju}Љ+MUE1҅=}uHE`Mԅ%MI @$Z?MI +t;t2uD$D$D$ tD$t$<$_Fv|[^_]ËM̋ED$ <$L$D$CD$<$D$EMA @EQ EŰUUԋỦUvUEMD$ D$T$<$EMt&Uԃ} [Ut MEMED$$-UMEUԉME} \} ]|} [Z}U <$T$D$ uD$ ~~ t&؀< u ҉UuE1vM܉‹@ EU 1T$M $u}ԋ} D$|$4$ %4$D$ED$|$4$)ut&vu t$E$z,ELT$E$UE̋4@ t&EED$ E܉D$MЉL$E$}BEЉEiED$ "D$EԉD$U$6E)E܉D$UЉT$M $#E1ҿSfUWVS%_DFG PUȋP҉U@x  GU׃UкUԉEԋUЍL EM9Mv;Mċ9J ^V ŰUD$)ẺT$$`UP}MЃ}ԉ#E" ˆF @tUt$$\[^_]Í&@EF E̋F MD$t$ $Ft&EEԉE& YEȋM̋UEDEDEȈD)t&MD$|$ $Eȋ"&L$Mt$ $‹EvEȋM̋UԈEȋM̋UEȈDxuD$E$K%MuD$ $6%v'UWVSL}.nu @ RUH EF%߉FB tU`B$taED$E|$D$D$EL$t$D$ E$F @}t E+uL[^_]Ív F땍t$D$D$D$ tD$$,L[^_]Ít&UD$ "T$D$E$, vt$U$%_t&UWVSUԋMЉ$)эL A D$UM UMEԋEM)ЋUԉM‰U9}B|;}uWUuPE}}}9}@|$D$ ỦT$M $`}EE}t&Ut$<|$M $}̿t&D$,}<$<iD$ED$ Eĉ<$t$)D$*9EkEw}̋uE̋}+EԋU€}UM Bwt&E̋}u+EfED$ D$E 4$D$fM‹Ft&}ME:CFD$L$4$U} UG;UM1E}EuAMEE܉ẺMoME}Uƅt9U UtB;ut"D$ t$EĉD$U$XEĐ};}duD$,U$R<iD$M̉L$ Eԉ|$)D$u4$h=IM4Ax69ut!D$ t$EĉD$U$EăEo&u EEǾDE܉|$D$Eĉ$EEՋ}}ED$ D$E 4$D$fM܉‹FEt&ED$ "D$E 4$D$6} M‹GfED$ "D$E 4$D$M‹F]t&E܍D@ $eEԋE܋}ԍ@Eԉ}E&ED$ D$E 4$D$M U܉EAD$ MԉL$E 4$D$UMԉ $, U}E$ fỦȋ}u)ЉM BA@M 4$L$t&Eċ}u+EUMM BU B B먍vEĉ+E}ǍvUE̋}ċu)ЋUqfD$ UD$Mĉ<$L$cEċE,t&Et$D$Ẻ$EEt&D$D$4$EED$D$4$EED$D$4$hEt&M̈uEt&U[fD$ MԉL$E 4$D$UMԉ $L U}]UE$+ EfED$ D$E 4$D$FM U܉EA_E܍D@ $E̋E܋U̍@ẺUԉED$D$4$wEED$ ML$E 4$D$1U$ D$ ED$U 4$T$M $\ vM1EEEzE܉t$D$Eĉ$EEEU11UBE܉|$D$Mĉ $EEX11M11116uč vD$D$4$^uPvD$D$4$AuPvD$HD$4$$0vD$+D$4$ uD$pD$4$xvD$D$4$UWVSEc`Qx@@ V@EOwMG@ xxF@ FpED$D$E$||E>;E1} 8D$%D$M $} 8.E@ HEM@ E9~:L$$ED$|xLx|9$Ĭ[^_]ÐĬ[^_]fD$D$E$%ED$D$M $fD$D$E$ofĬ[^_]ÍED$ "D$ML$E$|5M䋕|EEH  t.D$ D$ML$E$||EN9H MA <:t$|$$|Mpu@N |F @M+lD$D$D$ tD$u $t$|? |,) t$D$ $|fD$ D$ML$E$|2E|Ht&t$E$]|.L$ML$E$| |@ @SUWVSƅUUPW @G @|$M $Ĝ[^_]ÍvMT$L$ ED$U$돍&MT$L$E$kvD$D$M $U:UEvL$|$M $UFUEEED$ D$|$E$UsUEEE@UWVSuƉ}}UŻD$4$Eu8u tED$D$<$<$]u}]Ðt&T$D$E$D$4$D$EԉD$ vD$y'UWVS|y=lu 4$*x<$|$t$$Y < t< t< t< ft< u։ˤ &HvHvHЀ v<_t<=ƍvt& t2B<v+B<v$‰D$<$$u+Dž߭؃4݃<$JUt$$D${Ut&u ,f t ft t t tބU8|$ $D$D$UD$$|$D$E$e谸8UUT$U$EE$$nl1[^_]À >u ~&v\|$ D$D$U$D$D$ vD$D$$W|$D$U$ED$U$E$l1[^_]ËB< F< >< 6< .< !v2 tE u88 t&t( vt  t t vu<.bB< < < < t&< 2fqU$t&b~1A90~2&F~< t< t< t < t< FVtN< tF< tB< t>< t:< t&f*< t&t< t&t< t&t < t< uD$$`~f+P1xD$$#&UWVSU7;U1+MTP߭P؃4݃< $DMLljuHD @ G9rHt:@ uMDD$ "D$D$ $D뺍&H+ULM E @ p >/M+1\|$ D$D$E$U 3>uhUD$$M|$D$ $E #ED$E$EM $1[^_]ËU4$D$M|$D$ $(fU MD$ "D$T$ $ƀ>/\|$ D$D$E$t& $|\|$ UD$$D$MD$$E|$D$$`U0t&U8/t10xD$$ UWVS,u4F>@V)PF;X_D$4$Sfdždž>Bz |$4$D$#D$|$$,[^_]Í&fr@hD$4$PLzD$4$ t&J IρE 3D$4$UEU(B D$ "D$T$4$t&fZ,[^_]Ív|$|$D$ 4$NjFJD$ 4$tD$ <$舻tvD$ D$ 4$D$v&FPFP R tЋ@D$4$D$ vD$dž7B P R u뷍&UWVSEf@<$D$*D$ D$ UEԉ|$$D$4$1&EUԉD$ET$$EԉƋEfED$,$!zUvD$D$,$Xt&'U8M ]uu}}zw,y t?1ҋuUMD$ 4$(UMud٩ @vA tPt@tD$E$Ut$|$T$ $臷]u}]ËF@T$L$4$%D$ Jw'U8uu ]UÝ+M}t~ t31UD$ $JuZ 1]u}]ËF tƋxt@tuD$ET$L$ t$$뷍t&UB@|$t$$%D$ y끍t&'U8uu ]}}*~ t:1҉UD$ <$UuN5 *&F tPt@tD$<$蹱]u}]ËG@T$t$<$%D$ 됍&'U8uEu ]}E*PHP|-tW@ tq9tmU1D$$xE@ D$E$qt }‰׋@D$E$O@@ ]u}]Ít&T$U1$ E@D$E$t }‰׋륍1}t详 똍vT$U$}tSUDtUljƒ!ʍO~ x1ɋE ʅ҉@‹!fNjǂ@1'U8uu ]M`](U}Fǁtum1]u}]Í%xwڃ tntՉ $MD$ Mt(A@D$t$ $%D$ Pt&W 1놐\qYt&F txtˆUD$|$ $UtB(B,J0J4BP &UWVS<9'LU }uEĀ+u)E -v91L[^_]ÉD$<$uu-;uwϋ@tfٍyt&Ƈ례t + uGX+uEuЃEU9UrZU@ ,p t +|u ($4$@UEU9UsuЃL[^_]Àt + M9MUB@ @EȀt +u}ԉ)_ftQ UЋRÚmA UԀt +Uȉ$T$9}HAuЃ sMЋUЀz 뻀t +E+E UBыr9EEEE@ @EEF @EEEEȀt +u}ԉ)at&tQ UЋRÚ%DA UԀt +0Uȉ$T$59}AuЃ sMЋMЀy 뻀t +[U9UMUA@ vp HH@ @EЀt +auM)D}ԉ7t&@UԀt +UЉ$T$/9}@ uD$D$Mԉ $륀t +yE+E UuB@ ^@EȋFN@ $@Et +u}ԉ)dtQ UЋRÚtA UԀt +`UT$Mȉ$L$9}AwЃ hMЋUЀz 뷍v D$$Nj@P<|t t&t>D$$\9tD$$趱9<<$L$|$D$ $D$|8P@D$ L$$D$48 PL$$註lj$莯D$<$L$‹$訰|$ $D$<$T$\$~$D$6L$$DžxI‹9<D$D$<$ H`QߋsPPsx >uQh H 2t&`<-X|$$XD$DBh%=tR@P<><<DžD$T$<$谓@PsvE<#t<E,-~|<-+ErEb},2}܋E,|$L$ D$$H@P|< t< t< t< t&t< tf.vxP<"HH PP1@ :@M$&B‰ ƒ@qt&HP vT$ $LvFV< t< t< t< t< t‽Er Eb<&<-? M, NjM,T$D$ E܉D$L$D$D$D$D$ $|։u RƅfB<WT$$詓L$D$$GUEJD$$u,Cp@< t< t< t < vt< uf܋U,)<-+ },u|| EwDž0Eb},h}܋M,|$T$ L$$>t$ |$L$$9WFF<>t<<E,t9|++; UDžVED$D$$+x>EwDžEb<&u < t< t< t< t< t<-t&@ u, ϋM,T$D$ E܉D$L$D$D$D$D$ $4ƅօ<:PP<_J1҃@}܉|$L$$裋@P|},|8X<$A+;jwD$D$$y},t@ S@A D$L$$g<$ƅ$xD$ $踴<$#@P@tɉ$ }t@<$D$(p‹E@$UUE@$|u>GxYU 9\JT$<$ʀ6_&@$Wt@<$D$肉}D$@<$D$蔰뀍D$<$tD$ t$E <$D$荤fD$@$胫UE,1[^_]ÐUWVUH$P qp$4uqp$4u苰pH$P$p lP$x$p WP$x$hUUu|p x$WP$x$4 t1h4MH$x H$ }H$x H$uDEuЃsMEƸ%E@uED$EUMt$uD$D$ D$4$\UMEɉ}{MuEUD$ L$t$$xUEQ}EuEuU(f@E܋r 9Er}9^EEuD$4$k9EEMD$ D$E $D$mB uuED$ "T$t$$GƋE|E6ELMI(Mt(U苂UɉMH_t/Ut&WUɉMHu_&t U$UɉMDH  t UUɉMDHL t UȁUɉMDH$@tU裁Up}E@)Et UhUɉMDHt U@UɉMDHtUUɉMH_ tUۀUɉMH8@tU跀Uf rM1M f9uv> t9捶M듐L9uMjyMuM&<_t9v Qt鐋M+`` 9uHP9P-PЀ !<_uu%PvPvPЀ v <_t 9wfu)t&L 9uMxMuMQu<_$9w 9unuu䍴&PvPvPЀ v <_]t&9wLt&hE v9u } fr1E܉MVN҃99}   vu~uMvJ+`ot&9uNUf< t< t tD$t$M $^=vD$t$U$]D$M $Wud} o19u܉Uw]t&9} 'Et$D$ d $D$MccM9uw9uP<uuPv 1MafolD$t$E$U[UDB 9u9} > D$t$M $~[=vD$t$U$`[D$M $AUttt&t} 9u1U> ut&9} > t&zEt$D$ t $D$M`M9uw3E ?19u܉Uw-t&9} Et$D$  $D$M3`Mw9uwd} 19u܉Uwt&9} oEt$D$ d $D$M_M9uw(9u@> f3Et&? 9fwU ҍv;u1MvfiD$t$E$U#YUB?D$t$U$X<_ 9u9} D$t$M $X=jD$t$M $XD$E$ktv9uMuM)fƒT9>tD$ D$|$4$UEMMuKvti} 9u1U t&9} O> t+Et$D$ t $D$M]M9uwE 9u1U"9} 9uv1t-Et$D$  $D$M\Mt9} dUt&MM`1t&F E}x$;UuM̋u)э

DžT|@XUzA7`F$|U1҉^FG$F UB4hЃ(lpB(B,ELJLJ`LFB @I.LL1F|VxFTE5EF(U]V EuEEMot!uDEMDEME!-o$LЃ\`Q MALMD $A(tQt Eȃ'EEFEF UBFMN$t*EE;dM1ҍE䉍M܉EEDž}MtA DEhA 9MweE 9A s}T$D$<$_bM LEUMEUUB 9HUEUEEPlƅS;h|SS$MA y5uEUEUMEƅKMMElUtME;At;DžTMGME`U`IMB D\GB UTU\E1҅tEP WhUUx+\P EPDtDzD$D$<$%1DD$ <$T$D$M<$9EtEɉG%y%\A GM`L0LX6AB6@@ƅSj@EUMDžLEUU< "< "o"<?<?<=<㐍t&2Exv"xo"UPo<1<%B<BbUPvOo*<y:<ExBX<My L:EEMEMEUPv< t€oz*<A<Uz뀋hFEh`E+\MUMMUM`EDžD8M!DF뼋E`U: `M4P AL4u։L$F<$D$lOr2uN}V8F9G$:#l;V v, hD;V w狇lNV; EtlF G$F>B҉FE.?F}1EuEupf;rs‰σ;Mv}E9EUu}I!UMERfUU ЉMMRQFUFfPMNFȉEU`VC(FD Bf.(N$[xUƅ;EEU|EUh@ 9tD$ D$<$L$HG0;G4<*<$EEdT)h@ 9)D$ D$<$t$G EoPTM<6<#190ouu LdML$ MΉL$T$E܉<$VoD$D$D$ E܉D$ED$L$<$D$ED$ |X U܉UME EMMKU< < o,<<<<<8<,ExC?+F1L|<$L$!7T|)F|P$(`l|,pM`F 9G$d*|{F EVxLJT MTMF1L|<$L$s6T )F|P$`F9G$(N MFx|(l|,p|B4LJhTT{V xmMtUE;d볋XM;JEP} dJU} t&FhEEM;d~o+6=oMD$<$UT$ L$3:UEEEd9EsOuuMƋd9:Et$D$ <$D$2uʼnuud9Et&o'M9kU UȃDEx#i""ZU9dHMH0=F M`EFLqVxUDžLEEU|EUF UtGX]%M);\`rF UuM`SUMUtQh+\ыEh+\Dl;MpEMEEM;Q$UU EM@00t ;EMMExB,EB,B0FF FM`E;B$xM;J0# Ut},B҉uUUE:U;U3UD$$T$.3xx.xM9J(z R FxMJ0G$FJeEUEU vMMy$%lҋ9xV W$F VUBF$BF(ЃFEFKF,F0VE`_UE|uƅKUEUV,MUt*;vl;vUBUMN$EFFF(KF V G$҉FF,fx=MƅKMMV;v Vl;UBF$BF(MtMA$t;FuF$F(E<$D$[EV$F(FF$F(EUB/Ut !}!E}/ } uUu}[v<. <9tP<4tA<2tH<'ftB<:t>:t9Rt4}LtB}(6Efxu.'}tEM@$;At̀}/H}!HuMu}g.9tX4tG2ftL'tG:tBRt<n[xUƅ;E|UEïN$zD$<$xD$$gUUuǸ9t ,ME $tEU9UU DJ tۍWEUML(GE,UUEE}L}u9uz,UUuǸ=t&t dME $謔LEU9UU$ DJtۀ}xE9Eu}M< tO< ftI< tE< tAҍt&tE4$)UE9EE< u}E9Exu}?v<$T<$ $D$<$<$g<$%<$D$<$;<$~ $}<$$D$<$<$a+'UX1 $}<$SՄD$<$衷<$ 8<$l<$$D$<$<$ $=}<$ՄD$<$@<$&UWVSU2}u t E@ uSF%MV$UFƇXEF @tLM+M9N ~D1ɁĬ[^_]Ðt&F UN$MFƇXE뫍&Et E@ EEUd} FP4҉UUU9UiVUH(M@8EMEEUEEMUU)ЋUEEEډU*t&E MEMt E @EԋM MAEȋ@ y6} M̋E̋I9MIE+EMD$ЋUԉD$ EL$<$T$UD$T$EtF t M+A EEЋU t U MЋEЅ!}FtH P M}H ;MbXUUŰMH+N +UEUP9UMȉU}UUԉUȋUP}U tB ;EtbU9UsU1҃}D$ ‰T$U@U%=)‰ЋUBM<$D$EԉD$M;MXYM̃MEȉEEEUEЋMF AME+E1҃}D$L$‰T$U<$T$ .ENfFP0҉UP4MbFMP0U& _}u PH(M@8MEEEU+PURP0kMaFMP4UNEM$EEH : E@E~!EԉT$ $D$UBUF UEEEEUM<$T$螦MEŰU+P(9U}KP „&M̃MUM$59EsEX V MEډ $u5E̋FEUMEډ $T5EȋFFEMډ$25MÈXnE$ 5EZM̃MMsVUM9MX1UMDEMȃ:UЉEU2ʋEЋMډ $+59ErTVEUHFUEUF IU9U=UB 0NMHE)9EA9E;MvMI M : D$EԉT$$MUE $3/FEE"EME $3EXE$Ek3~ #EЍEP}F@4P҉PVB4;B D$<$ģFx0„t}8@0D$<$蝣F@4@0F@ @fME4F@0[P҉PHVB0;B9D$<$)Fx4`}%x xXEUM$E2U$U2MEFtXt/UȋEȃT$<$MEЉD$MEUUtE9E}thFEP҉Ut3}tP UЋU9UtqM9MvcUԃ}UЉx uǃ}t#}M̉MXFtc}&tBx GM+MXu2EE9E#}`xt&뷋E$0뻋@4FtE+EEЉEUŨx A~VU UWVSEU }Eu EEEB t`@$EUN$҉M F}uE1fƇXV 1M+MUVz(#B(E9My LJLLJTLJF @t LJLEUE\M UMdUUEUFtoE( M y0@#D$gL$<$+@ EEFt;EG+F9EE80tP;p EE(uTFP0E؋U(E̍E܋MEЍẺD$ET$L$t$D$ E <$D$EUUFE;E M E}!ЀXEEFP0E9EtE$UpV E9Er4F EˍvNƇXt&ETtBtF8NF(EvH avH  vXUExEU$'1ҋM}D$<$‰T$UL$ T$Ett&u9MUUu"t&E䋋9EEzU4$Ott&M;\MEUЉEE1}h]}t& UB E9E1UUUuuUE9ƉE8uEUl$OlAUB9ƉEv8Jtf8u9ƉEwfUlt&MM+EEMt&MUڅd$E䉍l%lEPF8$fUd+U+UNET$h<$D$轭F8hV<>vH4uE;EvEMUMUv9EE uU$UMiE̍t&?KESU}JMUP1)+EE|t&P P҉UM+M9HMIɉM}tNQwQyvvwQywQywQxht&gv]vtyw wGqxW3q%Q뙍t&t뺍&It&vqwQ'vvUWVSuYV E |$t1f 9u[^_]Ív€?vu[^_]ÍUWVS}!t8tEċu9uwEĬ[^_]9uv< tE뙍t&MMt ǃ)Eĉt$Eu|$ D$D$D$ t$$UD$ MD$D$ D$D$T$ D$@ $D$蹼@ 5p;uU MET$ $E@ ‹@E؋z E@ MPU܋A EuN}uH9U}&vpf}!&fUMT$ $蚃)9ЉUsۀ}+EEE}uuuvMt֐> uU̅t}ubu }!tNt}-tBt}&t6uuԋE9EL}tEME떍v1}t8}tB} uuԉNNFu뗍&MԈM냍vuԉFuhUEMD$ T$D$ $UXMEUD$ L$D$$NjE uD$D$4$}+t>}-t&:JM1Ʌ*f U܍r҉uu JM1ɅfU܍r҉uuJM1Ʌt&U܍r҉uuJM1Ʌf U܍r҉uu|pEċMUE)E؋ED$L$t$D$ E$޶UEԋE؅}Ԁ}< < }t$ uD$Et$$裶&E199Elju+}9Eʾu 9EsӋuu Et$$EHDUB EVT$D$$te;E̐r'}ft}E9}ԍv)wVy„t똍t&J FExhNɈMY}OVC띐t&B<fwPVV VKvFfwVỳ„tfJ NɈMxwNɈMy}wVyv먍t&Jt&wSVH?V3*VMvVUvtJV҈UvFVqvUWVSLuE >$蘖EE$芖D$ 4$E؋ED$E D$詮E܋h@ @@Bd+~ zR V  I N Ihd4$@D$4$2dž@4$谧ED$ED$D$ 4$D$Tx@FD>;FHFD+V F)LED$ 4$D$E D$"GED$ 4$D$ED$GEG 4$GUD$4$T$wWUԉ4$̚GMD$4$L$wUԋl@ 4$D$ D$4$NjED$a_l1ɋ@ %HuHUԉ|$4$w4$hUԋ@d+N ?OI N 8? <~8? h$d`9"Bt J y %t@xT$D$4$Fft:I;t*@ 80!t&D$4$ l@ UD$ |$L$4$.Uf4$T$ot&|$|$D$ 4$t ȃuUԉD$4$EUԄYt&`@H$t&L[^_]Í4$FDD$D$ 4$4hPhB 4$tl@ 4$D$}4$ǍD$詠ƆE4$D$E D$輱D$ D$4$D$萚l@ 1tfBt#tM@w(tAB 80tS@u|$4$u4$=t&l@ D$ |$D$4$A뾍vt Ѓ뚉T$4$裭뇋Ttx t*4$蔫DT$$wD$4$ҍ@ @t̋@ uUWVS,Uu <D$A9ErKt&9v&ʃv?ɀH9wډ+UEE,[^_]1鍶'UWVS,Evsu 8U1:f9vLy9€?9w&EU)ȉ$D9Er12v? Ȉ9sx߈9r+EUE,[^_]Í,[^_]ÍUWV1S,E Mqn9r8v/9sy҃9r9tiED$,$qtOEPt`Bf%f=itAD$̅D$ MD$ED$,$,[^_]ËET$$襓뺍̅D$ED$,$ƏƐ&USU EurM9rT$D$ $蝛[]ÍvD$T$ $脛[]UWVS\E &#8D$,E$ZU EU؋UuKEuE} 1ɺEE}EtQ}6U1\[^_]Ðw[EtEU U؋u؃\[^_]Ðt&}uE1\[^_]fa.nUS$UEurT$UT$RT$ @ D$E D$E$j$[]Ðt&UWVS;$E$T$,T$T$UT$ UT$U T$Lp$[]Ív'USޕ$E$3T$ET$T$UT$ UT$U T$o$[]Ív'US~{$E$MT$_T$T$UT$ UT$U T$o$[]Ív'US$E$gT$yT$T$UT$ UT$U T$,o$[]Ív'UWVS}ME 謔éU}}MM(u$EMEEmM ɉM]CEEEM E} ?}}EUEEE}}}t}uEE1EEEEMM}9}E9EAM9Mu9u}u9}E}D$ EuՉUt$|$$IdUMuĉMuu=}E܋}D$ EuΉt$|$$ dU܉UMEPMċu w :>uypwZup9uT)EEp)E}EċpM0}:u<u8tt&Ĝ[^_]É+E9u}u}ƍ})9EЉEE}딍t&p}t:t&u}t MuEt&p}E붍Mu}D$ Ut$uՉ<$D$iED$ Et$<$D$@bUt&UuD$ M4$uΉL$D$hE܋}D$ Et$|$$auG}+}9}t }fE9Et }fRMtMU U 1;}u >.}륐t&}t&f뎍}t&fsvU(]E 63uu}}D$ D$t$<$gEt$t$<$D$ `]u}]ÐU(]E ֏uu}}D$ D$t$<$agEt$t$<$D$ *j]u}]ÐUS$ED$ ED$E jgD$E$d$[]Ð&U(]E 63uu}}D$ D$t$<$fEt$t$<$D$ 誈]u}]ÐUS$ED$ ED$E ʎD$E$[$[]Ð&U(]E 薎Óuu}}D$ D$t$<$!fEt$t$<$D$ O]u}]ÐUS$ED$ ED$E *'D$E$誂$[]Ð&U8]E uu}}|$D$ 4$D$e|$4$Q]u}]ÍUSE 蘍ÕD$E$V[]ÍUH]ifeE1E uu}}D$ D$|$4$d|$4$Ue3u ]u}]P6USE D$E$^[]ÍUH]ɌeE1E uu}}D$ D$|$4$Fd|$4$fUe3u ]u}]5USE XUD$E$g[]ÍUH])&eE1E uu}}D$ D$|$4$c|$4$}Ue3u ]u}]5USE 踋õD$E$d[]ÍUH]艋ÆeE1E uu}}D$ D$|$4$c|$4$yUe3u ]u}]p4USE D$E$r[]ÍUH]eE1E uu}}D$ D$|$4$fb|$4$wUe3u ]u}]3USE xuD$E$|[]ÍUH]IFeE1E uu}}D$ D$|$4$a|$4$bUe3u ]u}]03USE ؉D$E$[]ÍUH]詉æeE1E uu}}D$ D$|$4$&a|$4$zwUe3u ]u}]2USE 85D$E$k[]ÍUH] eE1E uu}}D$ D$|$4$`|$4$芃Ue3u ]u}]1USE 蘈ÕD$E$舃[]ÍUH]ifeE1E uu}}D$ D$|$4$_|$4$KUe3u ]u}]P1USE D$E$[]ÍUH]ɇeE1E uu}}D$ D$|$4$F_|$4$jzUe3u ]u}]0USE XUD$E$h[]ÍUH])&eE1E uu}}D$ D$|$4$^|$4$:WUe3u ]u}]0USE 踆õD$E$E[]ÍUH]艆ÆeE1E uu}}D$ D$|$4$^|$4$:tUe3u ]u}]p/USE D$E$e[]ÍUH]eE1E uu}}D$ D$|$4$f]|$4$JUe3u ]u}].USE xuD$E$Hi[]ÐUHuu]}} =:tI|U;xt`(u D$'4$>hu]u}]ÐEU|$D$'D$T$ 4$b΍t&U;uKE䀾 s-Uet& >EU|$4$D$ T$zvUWVS\}63SH Qt B UԋQ tЋ@Ƈ:HPT$D$<$UEԈB @6D$ D$D$ D$D$T$ D$D$<$|t5t/@D$eD$<$pt @ B @EԆD$ D$D$ D$D$UԉT$ D$D$<$i{tt @EЍކUԉEEUԋ24$3_‹A @D$D$D$ T$ t$D$<$mt;Et@vtD$<${zƇUԋ<$D$ẺD$SEUԋ2[f\[^_]B:B:FB:FiD$zD$<$St&UȉL$<$ZUȋ@ @vD$ET$<$nH D$<$zh@ bHMp 9Έ7P"PPЀ  <_ن}̉ωUt&Pv5Pv-PЀ v%<_t!D$EЉ$3I&9w}D$<$yuƇD$6D$<$R&ƇD$D$<$QT$<$XY@ @&T$<$AY@ @9ML$UD$ "D$<$U~MUȉ}9ƇUԍކD$<$T$JQU]Ít&'U]Ít&'U1]É'U]Ít&'Uuu]~t`D$4$T$BYu*4$uT$$dA]1u]Ít&Duɋ]1u] U]ÐU]Ít&'U8E]u}.~+UPD PDP 4<2u7F tUMv )щu@V u8uUP ]u}]ÐUP T$$st&U8uu ]U}Mz}w@(tlpt>@ t88@  Dt(D$,L$t$ D$${s&>L$ t$D$$ZsLL$ t$D$$:s&'UWVS,u|üVD>VDF )‰F)WU4$_GD$D$4$OFU)ЃT$T$D$ 4$\z4$U^UB4$D$D$O>,[^_]Ð|$|$D$ 4$\bD$E 4$D$qUWVSUtvF)~$W4$L$UGGU<[^_]f|$|$D$ 4$M[M뺍D$D$4$UnUZF  EF <[^_]Ít&< N <[^_]ÍD$E 4$D$NpfUWVSU܅F)~%W4$L$UwFGU܉<[^_]Ív|$|$D$ 4$M ZM܉빍D$D$4$UumU܉EԋN OvF  EF <[^_]Ít&<F <[^_]ÍcD$E 4$D$nfUWVS,uxóFDFDF <)%0y y M@ @ @@|$D$ D$4$UQ$>UtvF)~$W4$L$UDGU,[^_]f|$|$D$ 4$MXM뺍D$D$4$UkUbF  EF ,[^_]Ít&< N ,[^_]ÍD$E 4$D$Fmv'UWVSLu6w3NDNDN <)0xx@ @ tR@EԋEED$ D$D|$4$D$UR VNj)ƒ~8PxL[^_]D$D$4$UjUEԋN 딍D$ D$D$4$V뮍<F L[^_]ÍlD$E 4$D$kfUWVSLuuNDNDN <)E0xxE@ @ @EԋEED$ D$D|$4$D$MUQ >U܅~F)~$W4$L$UBGU܉L[^_]f|$|$D$ 4$MUM܉뺍D$D$4$UiU܉EԋN GvF  EF L[^_]Ít&<F L[^_]ÍlD$E 4$D$fjv'U1҉WVStwF)~%O4$T$M@GM܉<[^_]Ív|$|$D$ 4$UATU܉빍}䍖F <[^_]fE}V  F <[^_]ÍD$E 4$D$i'U(E]}uHDr1HDH <)u=ы1F u1P ]u}]Ív1P ፓzT$U $T$|hU8uu]}prmVD VDV <)0tnxxtYD@ @ t6@|$4$D$D$ D$R ]u}]ÐD$D$4$f빋,4$D$D$ hD$E 4$D$gt&UW1VSLuqÁEFDN FD0txxEԋE+Eto@ @ t>@EԋD$ EEԃD$DU|$4$D$R L[^_]fUD$D$4$eUEԋN 먋,4$D$D$flD$E 4$D$f'UXuu]}ppmVDN :VD)0PPt|@ @ tH@EԋEED$DD$ DT$U4$D$R ]u}]Í&UD$D$4$cUEԋN 랍t0F 뤍yD$E 4$D$ce,4$D$D$et&'U8uu]}0o-VDN :VD)uYU4$D$LUt#F  V ]u}]Ðt&F  V ۍzD$E 4$D$dt&UWVSLunÃFD8FDF Mԉ+MQ}ЉM̋4$D$ULUąUԋF@tt4$NtuG%@% D$ GLD$GH4$D$`jNjF+Eԃ~EԉxEF L[^_]ÐD$ Mԉ4$L$L$ANEɋWm}1E vftL=u}̋}ȋG%@% D$ G@D$GD4$D$i‹F+Eԃ~sMԋ}ԉQF)~=D$ Ẻ4$D$ED$ciGUЍF L[^_]Ðt&|$|$D$ 4$LM맍t&D$ Eԉ4$D$D$U&MUĉEd&F@t)t$t 4$MuF &F MЉEF L[^_]ÍzD$E 4$D$a&UWVS\ukӫE܋VD M؉VDV <)OE؃E0NII5EEE؋EċED$ D$EL$4$T$UR MF))ȉσ~#4$T$7GEF \[^_]Ít&D$ L$L$4$UKUԉ뻍E؋DEtG@Et'EEt0@EE#Et_E@uE&}F EF \[^_]ÐE} F \[^_]ÐEtEm{ffU4$T$McMԄt,V EkUE@ 80%@V E?D$E 4$D$_vU8uu]}pimNDNDN zM )ȋM}}9 t%t8EF ]u}]ÍvG tZEF ؋ETtvBtMth@OF M܉EF 듍vEF {vuCt^ ЄugF }܉EF 4t&Pɍt&tŋB 80붐T$4$Xa뢐t&UWVSL}hGD7GDG )HU䋗0JR  L$D$ D$T$<$P EԋMԋ%)ƋEԋ@ E܉D$<$}(EE}*f@D$M $4EE9E|XD$ UT$M܉L$E$I@UB)t$t$D$ $|G넍t&}Uԉ<$T$&7L[^_]Ít&MHt I t\@u&E䍏uW  G L[^_]ÍU䍏u W L[^_]ÀtuEvfD$<$U _UЄ$U@ 80v>}8D$<$[D$E <$D$s[&U8uu]}`e]FDFD|<V 4$D$US^4$D$2U~ >]u}]Ít&U8uu]}dFDFDx<V 4$D$U]4$D$1U~ >]u}]Ít&UWVSlEUdÀEЋBDMȉBDEʋMP )ɉM  }EE 9UEEMċ@ tM@E@ EEitdodED$`D$U$Zt&ML$D$ "D$E$UsbUEEiu}uu}uBEt&HrIEh9U'Mи+Eԍ MЍvUЋP tt H y @8UȃUt x  UMA l[^_]Í&}uƇBEQHIE+@ 80Et&}nuXBEHtiwIE_@ 80EEE9U|t&EẼu9Uh<u3EE9U4t&HEÃ9Ut&pẼ9Ut&xẼ9Ut&@ @}(@D$M1 $5ẺD$E$!UƋ}ЍouMEU·UMuEF)ЃE}F)Ѓ}JEJ}F)ȃUԋQ@Eԉ4$UMfBMAMԉD$4$L$MUEGD$ D$M̉4$L$U\BD$ GD$Ẻ4$D$M9BED$ |$Ẻ4$D$BMUɉE@ EEЅEЋE@ E‹Eԅ~EԋEn@EĀ}}~}~F)Ѓ^D$E4$D$UOZD$4$s+UE}MԋfxF)ЃD$ D$E4$D$UZUElt&uȋỦT$M $?UMD2A l[^_]ÐtL@ 80Et&D$ D$D$M $ ,t&EO&Et&;vEt&+vEt&vEt&ZvEt&#v}t&uF)ЃM vF)Ѓ*EЃD$ D$M4$L$UXVF)ȃEQAt&EЋ@D$B 4$D$MY4$D$)Mt& @D$A 4$D$UX4$D$S)UF)Ѓ2T$T$D$ 4$<t&T$T$D$ 4$M]u}]ÍQD$E 4$D$PUXuu]}YVD VDV <)<}׉}? }tt"UEF ]u}]fD@ t6@}ĉG}~ D$4$-D4$D$Q&EF 벐D$D$4$MfG4$D$C4$D$&i'U8uu]}XEFD~ FDB @ tM@})׃]~ M4$D$cC4$D$%MN ]u}]Ít&U܉MD$D$4$:MU떍zD$E 4$D$1Nt&U8uu]} XEFD~ FDB @ tM@})׃]~ M4$D$B4$D$$MN ]u}]Ít&U܉MD$D$4$9MU떍zD$E 4$D$aMt&UWVS,uVWSFDFDF E)ByEEE1uUD@ tX@D$E܉4$D${CV u0F 4$D$#EF ,[^_]Ðt&D$D$4$J땍ׇD$E 4$D$jL&'U8uu]}PVMNDNDN <)EF @ tix FU܋E]u}]ÍzD$E 4$D$J UHuu]}TND~ ND )< G tg@EG G uF <N ]u}]Ë}UЉMԉD$|$4$cUЋMԄuF <N fEUЉMD$ "D$|$4$RMԋUxzD$E 4$D$IvUWVSLUSE܋BDBDB }܍4)q}u<}}ĉ}F$UD$Vt$/@Uԅt|$Uԉt$HUԉ$D$jUԃ}Euع}؉$UD$|$GUԉ$D$ED$$USv$U4Uԉt$D$ $ED$0UԋuD$$t$yAUԃ}bEM܋u)ȍIp L[^_]Ët9tRMĉ$UԉL$?UԅtQB }@ HA t*x A DtE&uEtvB M@ t@ EW$UD$ D$D$OUԉE'&'UWVSUԅB @ ;@ E؃}9}Ct$$UJFuعUԉEt0}؉$D$|$aEUԉ$D$E܉D$UԋuME܉$)΍yUԉD$FUԉ:<[^_]fB @ HA td@ E܋A M܋DtN}E#$U1UD$ $ƍD$t$v.UfEt&$UD$ D$D$MUԉE$U1UԉƋB D@ t+@ D$ $UԉD$t$6Uxv$UD$ "D$D$eMU봍D$E $D$gDt&'UWVSX|$ 4$D$ȋD$=`|$ 4$D$D$=|$ 4$D$D$=|$ 4$D$(D$=|$ 4$D$HD$c=|$ 4$D$lD$C=|$ 4$D$D$#=(|$ 4$D$D$=<[^_] UWVS,uDÃ} E4$UD$ D$D$4$?HD$@D$4$!1t'BH|V0;V44$EYE,[^_]ÐG%@ =@ tI1,[^_]Í&|$4$G<[W fBtWt&cvHɐRD$ D$|$4$(AP&D$G 4$D$-t&t& f4$EEt&T$T$D$ 4$|"&D$ E4$D$D$Y"Et&P1tB 80r4$t>FDT$4$:K U8uu]} AFDFDF <)yUD@ tP@ D$T$4$qu!F EF ]u}]ËF EF fUD$ "D$D$4$E?U돍يD$4$6fUWVSl} F@CuG tK D$4$|$tU$T$;¸G x|$D$4$DžP G D@E E$YD$ D$D$D$D$UD$T$ E4$D$7¸t6l[^_]Íl1[^_]Í|$4$PGt&D$ |$U4$T$31t1A uUB D$D$L$ L D$T$ D$L$}4$|$E7Q&P A TfP G TBE|$4$UỦEBED$ 4$6ỦE܉EEH @EDEG t@ E؋G }؋DE;Ms^}ԉΉUЋD$ UD$D$D$T$D$ D$E܉<$D$669uwUЋ}ԋE؋H|$D$D$ ED L$D$ED$D$ E܉4$D$U5;D$|$D$$D$ D$}܉4$|$(OỦzRf|$4$x,1|$4$g,`t&UWVS67D$D$D$D$ D$F @ 4$D$&tF EF <[^_]ÍvF EF <[^_]ÍD$E 4$D$0D$4$0U(uu]}:ÍzVD VDV <)D$E 4$D$L0D$D4$D$"5tЌD$4$|0D$4$j0&'UWVS,u9yEFDFDF M<)L$U4$D$4UF P 4$D$D$U54$D$/U4$T$D$4$D$$U4$)׍RUD$&GU,[^_]ÍD$E 4$D$.D$4$K/ UWVSFDEԉ+ETB<fB x t ><[^_]fP<t;F)JD$ D$D$4$Uc'Ut;F)CD$ D$D$4$U#'UeF)~_4$D$ D$D$&><[^_]ÍJ fAD$E 4$D$ |$|$D$ 4$ 녍t&|$|$D$ 4$U Uv|$|$D$ 4$Ui UvUWVS\Uu)ÐiRD VDV 4)mM M̋1uԋ~?fC7uԃv uuMuD\[^_]ÍEЋEJEMTUԍCUuE1vMċEy teM̉EM̃muԋuԅB @Er >-EuMăEy uuFtVEu-thU rB+M 1$t$|$]ÍvM at׋U fB+ʍvU r뺍vwt&M w뚍vUEU ]@ DÍ&'UE u]Í&tUfz x`1]Ðt&H1]Í'UUE tHtBR taHt@+H]ÍtrHu]Ívu ]Ít&Hw]Ðt&U1]É'U1]É'U]ÍUE tt@]Ðt&]É'UE tt@] Ðt&]É'UE t tH]Í&U]Ít&'UE ]@ ÍvUVUu t"tu^]Ð^]ÍUE ]@ @ UE ]P B+B Í'UE ]@ @UE ]P B+BÍ'UU ER tB]ÐB+EB]Í'U8]!öau}} !$ED$ D$t$D$ED$E$~9v ]u}]Í$vv'USED$ E!!aD$E D$E$[]Ð&UMVS `#t=It8rt>wt~atGbtbtt]uyus[^]Í&ruƒ11+uǃ뽍t&1A+uBbuQf1A+{xt&'UVSE M `BɉBuvlt @BW t"EGH]u}]ÍEt$$e͍&UE ]uZ0V tF]u])ÍD$E$V ׍t&U(}} ]uÍZJ օt 1B tF+F]u}]Ðt&E|$$͐t&UE ]u30Z0V t F]u]ÉD$E$m USEYtt@t*Hl[]ÐO 1[]Ðt&71[]Í'USExuYt't!Pt2Jd1t 1zh[]f 1[]Ðt&1щ'USEYt't!@ @t@t,@l[]Ívg 1[]Ðt&O1'USEÕXtt@t*P\[]Ð 1[]Ðt&1[]Í'USE (%XMt<t6RtRXtD$ $҃[]ÐD$ $[]Ío []Í&USE õWMt<t6RtRTtD$ $҃[]ÐD$ $`[]Í []Í&USE HEWt"t`tD$E$ [] USE VMt<t6RtRPtD$ $҃[]ÐD$ $[]Í? ύUSE ÅVMt<t6RtRLtD$ $҃[]ÐD$ $[]Í ύUSEVtt@[]f 捴&'USE Ut?t9RtRHtD$E$҃[]Ð'獶 ύU8E ]u}8NKUW O1t@W(t: t"B+F]u}]Í&Vt&F9si: Juy}} FJ9F9F n FE|$$NN F QV VA t}䍴&W(cF^t&tD$E$E 8&9 }u W(볋}ЉW(+FUSE Tt?t9RtR]u}]Ðt&US^ [M$JW tO$9tE$EG GGb]u}]Ít&'UWVS} 6 3ItOuDW t5O~&1fDtD$E$=W 9wމ$z<$r[^_]Í&'UE ]uðH0F t ]u]ÍvF u F fD$$F tFFF ]u]Ít&F$F F ڐU8}} ]Uu-*H7F tF u/F0F $U|$dF Ut*NNt]u}]Ðt&|$$N0N ̐&USëGD$$[]Í&'UVSmjGut*Ⱥ t&@t0u[^]ÉD$$@}@ E䍶EUD$ET$$y2PuHtˉ<$' t U H,[^_]Í'UWV1S,U da>}P U@% =t,[^_]É<$vED$UT$E$ }蟻u$0t&U(]6uu}$xw$$9`~vz8ճ$|$t$#$$u%]u}]Ít$D$<$UD$lD$ S T$$HT$ t$D$<$ND$ \t$D$<$4UD$lD$ F T$$t&UWVSU ã5}@ p tc4$~U `1[^_]É<$4$4t8uHtՍ[^_]Ív迲 륍UWVS,E 5t<RtRDtD$E$҉ǃ,[^_]1,[^_]ËE1&EtЋEuEt&tt$E$ ;uuڋE뵉D$ $߱ i&USE(%4UM ~!D$ EL$$D$V[]Ít&L$$0[]Í&'UH]U3Muu }}UMt$<$EUMt$<$D$T$L$ S]u}]Ív'USE XU3D$E$1[]Ít&U(}} ]u 37NFV  t"~ tN)]u}]ËE|$$D$E$FVUHU]Eà2}} UUuE|$$t]u}]Ív`EUD$ET$ UD$$D$ u?E|$$vGWfUWVSt)D$D$T$ t$<$t/FVN+MM}+EUFVEeU <$U܉T$,FVE&'U8]Eã+}} u7|$$‹F t N,uF0]Ћu}]ËEU|$$U USE 85+J(t  B(D$E$u[]ÍvU8}} ]u*p 4$ tq$]~e1;2tI4;0t_0;0tUE|$$ں%F84$UUt1]u}]Ív4$捶E|$$腺ύ&ǧ 붍&'UWVS,} *tz7tt|$E$,‹`vHtI@u"`6tu߃,[^_]Ðt&t$E$UыU, ‰[^_] 뺉'U8]EVS)uu }$t$ >W tO$9tE$EG GGb]u}]Ít&'USE (Mt<t6RtR@tD$ $҃[]ÐD$ $[]Í ύU8]U fc(M}u2T$ $UM舸UMNjF0tF F0FFT$ $]u lj}]É'UWVS,E'EtWvu}&9t,t@%=uEt$$ѷ9uՐEEu,[^_]ÍU8]EVS'}} u7|$$~¸uk@ F FFp4$uLF D$ Ft$D$E$胹…V VH1]u}]Í&Et$$ŽEUt$$IUщEF 9^F L$UM܉$ED$nM܋EUt$ȉD$E)ʉT$ $M܉Ot&E$a랍t&Et$$襣u3Et$$…KtFHvEUt$$jUuŋEt$$ԽUtHt&E|$$F QU8uu ]}PM%t$EE${uEP t/@ t]u}]ËEt$$蕣⍴&Et$$Mtƍt&'U(uu]Eý$}} x;w|t7]u}]ÍvG @t$D$$-G ɍD$E$t&U(}}]uu =:$t>t$D$<$D$ Jt$FD$-$豢]u}]É<$벐&U(uu]}ý#VD VDV y )t!@ t+@ D$;$2V D]u}]D$ "D$D$4$ fUWVS<9#\EUMTEЍS ẺUԋEԉMčrMȅUHɉM~F@ E1&U؋} ‰UJUԉM9҉uUMԀ< Y9Eɋ}sU$bTxJTjD$M̉L$E$UԉET$M L$E$D$ D$UȉT$MƉ $NjE$UЉT$M $ʨtEĉD$U$TGM ETD$t$D$ U$D$T$MT $EEpE $#E]&ʋML$ E T$D$G$E\[^_]ËE UԉD$Z$T$軟EE\[^_]ÍD$$7t&'UWVSLu t;EEu '< t< t< t< t< t<:t&tބu 1L[^_]ÍPvPwMPvPvPЀ v<_t1<(}E~9i<_t<'NjED$|"$t5t$|$|$ D$D$D$E$N,Ex)tC+ED$$K2\x)uu+EUEEUD$ t$)ED$E$|UԅtxE܉MԉT$D$E$bMԅtVD$ E L$D$E$Et$$1(Hx 3E؉L$D$ E D$E$ED$$,Et$D$ l)t$$|$ D$ED$$GvUWVSFDF )ZQUԋB RUP uW1ɋET$L$ 4$D$}ԋV tiUЉD$4$4$D$ZUЋMԉ~ ><[^_]ËF MԋDtHtRyv{vv뭍ET$D$ "D$4$Bu#tN v1Ƀx 1뉍t&t@ 80sUЉD$4$UXD$4$U(]IF}uuDWlt^GD$$͚D$ D$G4$D$^4$T$ D$E D$]u}]Ë U8uu]}ít1x~]u}]ÍD$4$0ٍt&1+!4$]L4$D$Er4$T$` 4$T$ND4$T$<4$T$*|4$T$4$T$<4$T$4$T$ED$ D$@4$D$T$ D$4$D$t@|$4$D$f&$&v4$D$ʲjvU(]uu }}<$蔠ypDt$<$D$T$ 賽]u}]Ív'UVSÚ0uD$4$Ft^PtWM0D$4$L$(M,L$$M(L$ M$L$M L$ML$ML$ML$ ML$҃0[^]Ðt&诖1'U(}} ]u7tBF@|$D$$}F@tU|$$Ѕu 4$7]u}]Í&'USE xuJ@t忉JD$E$ش1[]Ít&UWVSpDFuXt?UtEUD$ T$F|$D$Ŵ$F]u}]Í tD$$rMtEMD$ L$FU|$D$Ŵ$]UB@sUMt$|$T$ UL$$ЅMM|$1 $7t&MUt$|$L$ MT$ $Ѕ 1xD$E$j&'UWVSLu(}t D$<$蔺UT$D$ M<$L$U褴MU MHɉMM0L$(M,t$ L$$M$L$M L$ML$MT$ L$UD$<$T$UƅtXML$E$D$UT$ M t$<$L$ɣt$<$腶u}Iu HL[^_]Ívo늍vEE@D$ ML$E<$D$U虳U܅tRHɉMtHM0L$(M,T$ L$$U$T$M L$UT$ML$UT$ MD$<$L$U…u1L[^_]Ít&@@EED$U$M L$D$ Et$<$D$U 뭐t&t$1<$親t&UH]uu }}t$<$t$<$D$щD$ xUMD$.UMPHEt$<$D$ ED$F]u}]Í'U8E ]Mu}0F F U :G ~ FFU 1ҁHF )FV9~υFЉFu9tM܉|$t$$謩M܋U )`tEU L$ D$ET$$ʕlj]u}]Ðt&~)vE UM܉D$$F M܅1뒐UM܉D$$JMUHE ]u} B usBt +EE;B s9z,uzUME T$ UL$D$$莩]u}]Ðt&Euԋ}9uMԉJU `EƋMUD$ $蒜UsM EUL$$oUr cB0tB TM EUL$$ UB B01vUWVSD$<$Ϝ9tUT$ ML$E D$E$EE,[^_]ÐUEuËE,[^_]Í&E$a뤍vUWVSt>EхL$M܉t$<$RM܅]ȋu}]Ít&EU<$D$肏Ut8uuхtăfL$UM܉<$UM܅bA @ D$ D$D$<$M܉<$~M܉<$L$T$UD$ 蛱UED$T$<$蘤t&U<$QUt&L$<$ȧ1   D$ D$UD$<$1UR'vD$<$|U/D$D$<$跗U D$ D$D$ D$lUWVS<9Lu$%E $$,9}T`D$D$t$sw$$%L[^_]ÐE܉D$ T$UЉMԉ$t$)wE܋`D$$~UЋMԅEtvE܉EċM܉)эU܉L$T$$MvM1҉UMm؃4݃<0UL$D$$裄f$$>u`L4$|U؉NjTtx taE؉$ܮU؉D$$ |$t$$荁ED$$ D$  UD$lT$$v@ @t@ u늍UD$lD$ ) T$$=aD$E؉t$$DD$ 7 눉D$ (D$E؉t$$xD$$'UX]虶ÖeE1uu}} $qu!1Ue3]u}]Ëtىt$$EwU?$UЉt$蔜|$$蘉UЅtEԍED$ D$D$t$D$tMx UЉ<$r$ѧUЋUԉ7E܉UЉD$4$躟UЉ]t&Eԉ^UVSMWTtD9PuG&9Pt;uD$ $t$Crx$藄[^]fp [^]Ít&UWVSL}eE1EȴU|$D$ E T$D$E$6tSP $UqUEEuPE܉D$<$襞D$Eԉ$B t$q$mUe3uDL[^_]Ív$\q$蔎xE܉UЉD$<$ك@ow}E fEm]mU؃[]Íكxaw1ƒ[]f}E fEm}mU[]Í&US~{E كv>ك@ow}E fEm]mU؃[]Íكxaw1ƒ[]f}E fEm}mU[]Í&USE ÿvBك@ow}E fEm]mUv؃[]Íكxaw1Ҟƒ[]Ít&}E fEm}mU[]Ðt&U‰SEtRڞtI؍v1ɅxRكDovt&t1uلt[]Ívz[]Ð[]t&Í&ڹ UHE]u}jgta`$9}`I$t:F ttHM~ u u9Uw9ɉuEԋu U 9Ev8.t1]u}]fM ␋@fML$D$ t$$yMrvUWVS茍Éu u4$7jDEfu< t< t< t< t< t&t<+H<-E)EED$ED$ ED$E D$E$oUEt E@[^]Ív1҉EUm@[^]Í&'UWVS\EU~Ðu 8ƒUu;11ɋU2E\[^_]ËE xbu |n1EE+&҃ J tntgB<v>_}VUVB<uЃ}t0UEu}.݃ٞQE+u 0U}t U؍\[^_]ÍD$E$UMa`UMĄMEmEGETD$U$]MxMĄE-D$D$ D$E$ZMEt&E b0u !v+u ED$D$E$ZZMUfD$U$]wE؍ضD$D$E$ ZEgƃ1`+u CU1VS@u{Ò>EED$ED$ ED$E D$E$LUEt E@[^]Ív1҉EUm@[^]Í&'UWVSlEU{0U MƉUuH1&EUMEԃl[^_]ËU zxM MȐt&UȃEEM?&}KE+}e EԅBEt\BtTD$$]BEUȀ}t +BEȃ}Eu}M݃ٞEȋU+E MEEtEE؍Eԃl[^_]Ðt&EȀ8_}@D$$]UBUED$M $U\\UuEEEEmED$D$M $WUȐEED$ED$ ED$E D$E$mUEt E@[^]Ív1҉EUm@[^]ÐYm/U]فÍv'UE]@ÍvUE]@ÍvUE]@ÍvUE]@ÍvU]Ít&'U]Ít&'USEvåD$P$T$^[]Í&'USE hveD$D$E$@^[]Í&'USE (v%D$D$E$^[]Í&'USE uD$$D$E$][]Í&'USE uåD$D$E$][]Í&'US$EhueD$D$ED$ED$ ED$E D$E$>$[]fUSEuD$E D$E$Q=[] USEtմD$E D$E$=[] UStÛED$ $m[]Ðt&USntkED$ $l[]Ðt&US>t;D$E$uj'USt D$ŷD$E$=jU1҉S4EsӳxMD$EMD$ D$D$ E @L$T$D$ED$$.l4[]Ít&زfU1ɉS4UfscxU}D$ D$0D$EL$T$D$D$ E D$E$k4[]Íڱ륍v'U1҉S4ErxMD$ED$ D$D$D$ E T$D$D$E$@k4[]ÐزfU1҉S4EvrsxED$EMD$$T$D$ E L$ MD$D$EL$$j4[]ز뵍v'US4ErD$$D$D$ ED$E D$ED$ED$ E D$E$ej4[]ÍvUS4EqåUD$D$@D$ET$ D$D$ D$E D$E$j4[]Í&'US4U8q5}D$T$ ЃD$ED$D$D$ D$E D$E$i4[]É'US4EpŰD$D$D$ ED$D$D$ D$E D$E$"i4[]Ít&'US4EXpUD$D$D$ ED$D$ D$ED$E D$E$h4[]ÐUS$EoD$ED$ED$ ED$E D$E$@$[]Ív'US$E(oåD$ED$ED$ ED$E D$E$\R$[]Ív'U1(uu]QoNt4$LD$Et$ D$E D$E$W]u]Í'US$EnD$D$ ED$E D$E$b$[]US$EnõD$D$ ED$E D$E$b$[]USExnuD$ D$E D$E$L[]Í&UWVSLE6n3u8&U N MċV LMV F$9}|_D$4$VU D$ EċMĉ4$D$L$WLF$PU;V(|4$QaF$HMw&L[^_]Ð&U(uu]}`m]V$B;F(|4$`V$B} N i;E$*[]Í'USi E$)[]Í'UShۨE$][]Í'UShëE$-[]Í'US~h{E$o%[]Í'USNhKE$?%[]Í'UShE$%[]Í'USgE$$[]Í'USgûE$/[]Í'USgËE$%[]Í'US^g[E$%[]Í'US.g+E$%[]Í'USfE$O%[]Í'USf˦E$%[]Í'USfÛE$E[]Í'USnfkE$3[]Í'US>f;E$3[]Í'USf E$_3[]Í'USeۥE$/3[]Í'USeëE$O6[]Í'US~e{E$6[]Í'USNeKE$5[]Í'USeE$5[]Í'USdE$5[]Í'USdûE$_5[]Í'USdËE$/5[]Í'US^d[E$4[]Í'US.d+E$4[]Í'UScE$4[]Í'UScˣE$o4[]Í'UScÛE$C[]Í'USnckE$C[]Í'US>c;E$_C[]Í'USc E$/C[]Í'USbۢE$X[]Í'USbëE$oX[]Í'US~b{E$`[]Í'USNbKE$O`[]Í'USbE$E[]Í'USaE$E[]Í'USaûE$][]Í'USaËE$\[]Í'US^a[E$%[]Í'US.a+E$_%[]Í'US`E$Z[]Í'US`ˠE$Z[]Í'US`ÛE$X[]Í'USn`kE$X[]Í'US>`;E$G[]Í'US` E$F[]Í'US_۟E$L[]Í'US_ëE$D[]Í'US~_{E$X[]Í'USN_KE$[[]Í'US_E$Q[]Í'US^E$U[]Í'US^ûE$_T[]Í'US^ËE$O[[]Í'US^^[E$[[]Í'US.^+E$N[]Í'US]E$2[]Í'US]˝E$??[]Í'US]ÛE$5[]Í'USn]kE$O5[]Í'US>];ַD$E$ []ÍvUS] D$ŷD$E$ []Ít&'USE \ŜD$E$K[]ÍUSE \ÕD$ D$D$E$[]ÍUS$EX\UD$D$D$ ED$E D$E$<$[]Ð&US\ $D$ED$ ED$E D$E$9$[]Í&'US4E(D$ E$[îD$$D$E D$ED$ED$ED$ ED$E D$E$_4[]Í'US4E$H[ED$$D$ D$E D$ED$ED$ED$ ED$E D$E$4[]ÍUWVSZٚLE} uD$ $?SOMEm؉݃<]]ȉ $UKUԉH}EmEEwm $UԉMȉD$t$K6UԋB% BMȍGJ A A t1va9uL[^_]؋xD$$I&US$EYõD$D$D$ ED$E D$E$jX$[]Ð&US$E hYeD$D$D$ED$ tD$$X$[]ÍUSE YD$D$E$@[]Í&'USEX՘D$ D$E D$E$ T[]Í&US$EXÕD$D$ ED$E D$E$2$[]US^X[$E U9ЍvtD$ED$L$ T$$e2$[]ÍvUS$EXD$D$ ED$E D$E$"R$[]USW˗$E U9ЍvtD$ED$L$ T$$Q$[]ÍvU]yWvuu $b'$jUt$T$$L]u]ÐUSED$E !WD$E$aL[] USE VD$D$E$0[]Í&'U(]Væuu }}D$t$<$F tF ]u}]ÍD$ D$t$<$ UfUSE 8V5@ t @ []Ít&D$ D$D$E$T[]ÍvUSE UU@ tI @ []fD$ T$D$E$T[] USE UÅU@ tI @ []fD$ T$D$E$!T[] U(])U&uu}} D$4$|$hE|$4$D$U]u}]ÍUSE TŔD$ D$D$E$xS[]ÍUSETÅD$ D$E D$E$9S[]Í&U(]ITFuu}} D$4$|$@E|$4$D$u]u}]ÍU(]Suu }}D$t$<$X@F tF ]u}]ÍD$ D$t$<$`RfUSExSuD$ D$E D$E$I2[]Í&USE 8S5@ t []ÍvD$E$M[]ÍvUSE RPt @[]D$D$E$5[]Ít&'USE RåD$D$E$4[]Í&'USE hRePt @[]D$D$E$}F[]Ít&'USE RD$D$E$@F[]Í&'USEQՑD$ D$E D$E$5[]Í&USEQÕD$ D$E D$E$5[]Í&US$EXQUD$D$ ED$E D$E$b$[]US$EQD$D$ ED$E D$E$"$[]USE PՐD$D$E$[]Í&'USE PÕD$D$E$5[]Í&'USE XPUD$D$E$`,[]Í&'USE PD$D$E$[]Í&'USEOՏD$ D$E D$E$[]ÐUWVS,UOÓETPU؍|<$@U؅tvXU1EEE E܉Et&U+MT$UL$M؍$M=w9w9|?4$|$8u4$1}FE,[^_]ÍME؉ $+M܋UUL9MMcEUM뵍'U8]yNvD$=$uƉ}UtlD$.$tD$ $txtE4$D$D$`Dt&ƋE)t$|$$BC&t}\ՄD$dD$<$D$d<$ƍ,D$}))9!ʋtPTEe3]u}]Í~cNt&Lt+XtL$CtǀLtƂ\ǂPǂTjPt/D$ $DB&UWV1SK׋!$%U:xUt:xutU+Őt&xuƃ[^_]Ív'U]IKFuu t5t/8.tBt`D$T$4$]u]Ídž]u]Ít&xu4$D$ dž봍t&4$D$D$=]u]Ít&Uuu]JÀ_u,`$D$)Ɔ^Ɔ_4$"]u]Í&Uuu]#J ^u, D$$)Ɔ^Ɔ_4$M"]u]Í&U(uu ]I}U`tt$<$DtW<$"AEt$$cB‹EU`>Ct7&U^Ƃ_$!]u}]f~t뼍vU`$@Eǀ`ƀ^ƀ_볍v'UWVSHوlE$ǍN$E]$t$$E ($ @t$$'EEtUD$$2AEE$?t$$'EMȋEL$$@E$?t$$'EUD$$@}E0UEЉ$D$8MȋEL$$VUċMT$ $?$(/D$ED$ t$$=>t*VD$ D$t$U$>„t MƁ$EED$E$'UXtƂ]MЉ $j>Eȉ$_>Uĉ$T>l[^_]ÍEEE} MTt x E$=T$$! UTt x M $=<"T$$"MTt x pEU$6=UT$h|$ t$T$$}u""MTt x EU$~kt&  J 0  >HJzɃ<  HJ? Hm}M~g}EEuJ}J0 UP}>PP [^_]Í&'UWVS,u4>1~M E9t&< Wt)< t%< t!< t< t8to<#vt<(t:<[tV9v`Őt&9wNf9֍vvB: u D$)EM4$ZMP뱐D$]ރ,[^_]ÍйɉD$EL$$3UH]u֋UQ=N}}}D$|$ )ʉT$L$$:$P@w.Ut&t"0M ?&E 1]u}]UWVS|}EȉUE<ú|U 0D$,Mȉ $Uq8U<%E;uMEMĉUBM =v M%U~I;uHEẺD$UĉT$ Et$)D$Mȉ $#UJw뢍&}ԅED$,Mȉ $7U<%EЋ:9sR9}vMűu t&9v9MЉL$Eĉ|$D$ )D$Uȉ$";}rËu9usuEtRD$*Eȉ$ 7t;EtTM3T$L$ T$D$Uȉ$.fM1|[^_]Í|1[^_]M*몍'UX]:æzuƉ}D$,$^64$T$<%D$ED$ E)ЉD$s!‹EHwiwЋ]u}]ÐUD$*4$5UԄuEɍvE D$*4$D$ `D$"UE 4$D$0D$#0&UWVSlẺU؋2B9ëyEb 9e3MЍ}< 5< -< %< < v<#j,( U؋B %E;u,'MЍ93lEȉUĉM&<<<> fu9w}Ѓ9M11l[^_]Í}ȹ‰EԉD$<$UMUM ׉%=pE E%=#u89u}E@@Uظz2l[^_]ÍvD$*Ẻ$I3tU؋EB uD$MԉL$D$ ED$*D$Ủ$gn}v}v%D$'$!E9> }А> t&o9wM11q&E@ ND$*}̉<$UMF2UM'E؋}؋@ EԉG EEEu}}܋E܉T$D$*D$ }̉<$UMPUMPЀ <*<[E؉pD$)U$ẺM؃ycA pA 3uD$D$}̉<$+t&0JЀ v%f= ҃DBJЀ v݋U؉BB9uU9rB ]u}]Ít&ύ<>9s|$T$$sԐt&UWVSLEԉU؋B-m R M؉UЋuЋr9uЉuN}Ѐ?BUf?x9w;}+EЉEċE܋U)DBE$MĉEȉL$uЉ$t$g E1ҋHUMm؃4݃<$kuЉ}E̋E}̋H$P @(uUM܋ű}BMLu9vUЋMȍ)Ѝ9wEE9}vI}f9u f9tD$ D$T$Eԉ$*9}wɋ}ċMW)9u v9t}W}̍L9Muȋ} &Q)Q$I(uM̉ $E#u؋ENu.J u^}ȋu)~ BUP N L[^_]Ëu؋rtr }؋J)MBOu؁NJ t}Љ<$E#M؋E늋} GL[^_]Ë}<$"Eȉ$"4D$Uԉ$!xD$$Qt&UWVS,MdE 0dUMe5u10dPM?*ôj\+x V +[F$ݝhDž(Dž40d50@Tt#d\+B 9Z50I0FEƅp&T}3tnP)?!ω;E}EЄx 4uBUtt EdA+\9|ZdA0;A8}<%Sv&TdD$D$4$ovlT$ $e붋\T$ $|$|$ UЉ\끋P+EuЅu Ef[+ED$d|$$1tg)Ѐ[E~HE9P6P v9j6ЋUЉE҉Uߍ&ƅ[4 T$t$#44EE~4ك&݅hv݅hݕhٞwؐ݅hED$$ݝ?d$݅ݕh\$ƋdB+\a"t$d\4$\0@ 'd\+B +50d 50y59Pf5\@ @E\50\@Dž4ƅpToUЅ҉puEDžp[&}p`9sЃu9p`r9`0`ƅ[E[E@UP)94Eu04dB+\/EP9P;[,EE̋TI151E̋UЃ\D$ T$dD$$!\FP+UE9;udD$ $ d4$D$pp HDTh-ME#11}`L&UЃ9щU#uր[P;E~#T$dT$`&둋EЅp0A [P+E;E4d0[)EЃ)P;M)uP;u)TdPT$ $D(EЃEw)4 &PU+E90A$[ET}~?9Pl0P t&9R0ЋUЉE҉U9PdxD$<$ovEЍ}ȉp4t&uE܅hݝhEЍPUE9P[a0E~TCt (롋0щΉEBEBER UAEAEAEAEA EI$ׁ#TMN( MF EFVF(d\EЀtupP\0>vN \|$D$EL$ $d9}EЍPUE[uf 맋#}Љ4ݝhDž(dD$4$EЍPUT}̍MLd`p\&LTPD$T$`D$ $(pEtnpED$D$<$<$D$eEЍPU[aEEpEu‰ ʉ%  ЉEzEЍ1Dž8,vU9P'[fU! քmd\$\t$dD$4$1EDž8EuE89Pd@D$4$dP+Ed4@$t$3d $D$LtHD[}Ѝu"UEP`9<  <@0U?E@gt&ƅp <@k0?pB9ƉE,ppJ @'0U?9։$e,8 <@0U?9v: @$ 8 pEEЈMUD$~D$ `Ld|$D$$iEЃE,U1911똀[&}ЅE9s0EwUЃ҉U9r֋dԼD$$EЀ[OuȋPpd$1ɉx|߭x܅hݝhEЍPU';}D$,4$U4$T$<%D$pD$ )ЉD$‹EȍH)E4G4 Y(n1ɀ[tT#EЅ"P҉Ui(0v#R(Eu}#B$U9"$D$dT$$m؋dD$$ƋdA+\<#d\t$$\UЅqp0A 'ƅ[TU4Mȉp`t&EЍPUN[T`PD$D$ dT$p $LUtuf8UȃTntkUto ҋEЉUE܅hPUݝh[WEEfUufTnfUuffUud\$\D$d҉T$$Tu`4}̉L%pEЍPU[LPTD$D$d$`|$ pEpẼTN} 1ҋEЉ|x߭x܅hPUݝh[=EEpErlj%  ЃTNE_υ}[d\ $H\d|$D$ $TEpuEЍPUN[tsTPdD$T$ pt$ $VtG4tW݅hEEPUݝh[uEE]uD$4$4udEݝ\$3\d݅\$D$ $Tu`4}̉L%pt&EЍPU[LPTD$D$d$`|$ p}tzp}̅ a1ҋEЉ|x߭x܅hPUݝho[QE8Ep}u%  Dž}sd\ $\d|$D$ $fTu`4}̉L%pt&EЍPU[LPTD$D$d$`|$ Tp}tzpb}̅  1ҋEЉ|x߭x܅hPUݝh[QE8Ep}u%  Dž}sd\ $<\d|$D$ $TU4M̉p`EЍPU6[`PTD$D$d$pL$ 4Ut` U̅tx e UEE܅hPUݝh[kEEUuЉ ȉс  …Uud\ $\D$dT$$4Up}ȋEЍPU[TPD$|$D$ d$pTnUtbUtf  fvE߅v܅hPUݝh^[pEETnfUuffUud\ $\D$d҉T$$TU4Mȉp`EЍPU[`PTD$D$d$pL$ \Utlf Uȅtb  fvE߅v܅hPUݝh[`EEfUuffUud\ $q\D$d҉T$$J4Up}̍&EЍPUn[TPdD$T$ p|$ $r"TNUtXUtZ UEE܅hPUݝh[yEETNUuʅUud\$K\D$dT$$'TEpuEЍPUF[tsTPdD$T$ pt$ $NtG4tW݅hEEPUݝh[uEE]uD$4$4udEݝ\$+\d݅\$D$ $TEpúEЍPU&[tsTPD$t$D$ d$p.tG4tW݅hEE̍PUݝh[uEEEuD$4$4udEݝ\ $ \d݅\$D$ $gTU4M̉p`fEЍPU[TP`D$T$ p$dL$UtcvU̅tx UEE܅hPUݝhf[hEEUuЉ ȉс  …Uud\ $\D$dT$$TU4M̉p`vEЍPU[TP`D$T$ p$dL$LUtcvgU̅tx  UEE܅hPUݝh[hEEUuЉ ȉс  …Uud\ $L\D$dT$$(P+U҉UЉP+E4EЅEЅdD$ $d4$D$"pp HDTb}EM11`"҃1UЃ9׉Ujuـ[P;EIT$dT$`럋PU)9ЉEWf9cdԼD$ $vU1: @:0U$<9 8? pdt&Uƅ8Dž$&dD$D$ $d\$\t$dD$4$rdD$,4$U4$T$<%D$pD$ P)ЉD$,UȍJUG&U: wB9Az 7U,t&(t&(t&(t&(rf(t&( t&(f(t&(f(et&88E4UEhU̐D}UEU} fUlfU\D$ $L$L$V\v\4$\D$4$T$UU PUT$d|$u}4 -t$$,4EE}4dp0Љ\U#A EUQUQUQ UQUQUQUA QEA$EA(\Udt$ D$ |$$ UM $`E9P[1`ELA L@Eq pp,WEpL9u 9tL;pv4̐)ƍF09prҀL-Dž8`B % B 80t`1D$d|$$d\|$$\EЃETP dt$<$`LA $`dD$ |$D$$KpdD$ L$4$`D$ |$ƉD$d$jd|$$XF -@EN `p.t4!((dt$<$}dA+\ \L\kp+q pdF+\d \p\(44  PU U(UEЍpu艍(Dž4$dD$ t$|$$`pE\Q}+pUЉ+9)׉}ƅ[@P+E9Ћ4qtt EdW+\9}#D$ \<$D$D$\EЋdQ0;Q8uȍ}̍U׉`dLP8E̋8LD$ UD$D$<$QED$ U<$LpD$E؉D$_D$,4$`84$L$ T$<iD$pD$4ɉ‹ẺE4 1ɉx|߭x܅hݝhEЍPUE9v[D$,4$FU`4$T$L$ <iD$)ЉD$Z‹EȍH 4EL\4$\D$4$T$UAEDž4jE+=[}PE)9ƒTZ7TAh[t0A @D9r,t t t t&t t u9sԃd)|$D$$ǀ[t-O 0F @udD$|$$vdB+\d|$\4$\EE}$dEȉpPỦ p4$L$E,EЍUĉ84$T$p讽 p4$L$蔽8p4$D$z,4$T$p`UȋE̋MD$ ЉʈEE M ЈEEЈM~D$ $L<$L$D$EЃE%U9:  98 EPU\dEE<$\r\D$<$T$)EЍPU\TMЃ~7dU(UMǃȉ(RE9PC[DETbu1ɍFE (ƒ9u(EuЋ}~29P 9P…9Pf)UEKE̋TD$PuD$|$ $d臻7E}EM11҉`%Ѓ1EЃ9ljEu׀[tKP;E$`dD$b(UUEEtE„dT$D$4$dD$<$Qp+q pdF+\b\p\!U`dD$ "D$L$4$\D$ $+E\D$  $|$|$U\ME}1`1ҋ"ЃEЃ9Euڀ[t;P;E$`dD$hW뙋EE닋\D$ 4$|$|$\s\D$  $t$t$d\\D$ $L$L$;\)‰)‰CUЋ}PUFUUfvE߅v܅hHMݝhd|$T$ $x9PNdD$<$-\D$ 4$|$|$o\uT/t E\d+A 1+}e3=X,[^_]Í9;?u/>t&t9wd)|$D$$1;P+EEUIE‰ ʉ%  ЉE\D$ $L$L$H\t9r6<t%f}$賈p|+|$t$$ʉ<$E<P@ |<4$@48DxF \+x!/+A$mH.9 ҉h`@$V[ƅ%|G`@$[ƅ%pB +ƅB $蟆F$ƅ ƅt$T$ $舞1 9‰ ‰򉕔 Q 9 )…tO‰D$ D$4$T$TɉuÉƅ<$dO ƅ$@1ƅpA9Q;8|p<|$D$T$ )D$$腕L0<8<984>8L<lPL0넃P89DDž,}|9HH+D)9k0 hHl,p8H0 8ѥ,9D|9HDX@TD$( $D$U ( L8DžP88H]00k0 hDlHp,LXDžP89 8DžPX@TD$( $D$U (D$(D$T$U ( L8DžP8{Dk0 h8l,pDXDžP'D$D$T$U (|uOXDžP8DžP8DžP 8DžPL UWVSlM葅Î}R8q1v9u󋅬DE D,D$<$M)9׉t9 ‹ )9uߋu9t${Dl[^_]ÍE <$D$rl[^_]Í|1҉߭؃4݃<$uBE DD<$D$Dl[^_]ËxD$$_rvU4$|$MEU u}uM} u4$|$]&M} u4$|$](&UWVSu賂ðEFD8FD~ }V UNAEUIME MtME@tMtcV)D$ |$|$4$bHPFEE[^_]Ív4$脀NQUn4$y(D$4$_E@}ED$ ED$D$4$D$OxE @  @  : H: H:H Et&MP$ @ (DžxQv`1dž(Qt`D$@4$D$6vEDžxEEE+EEEUnDM MA U@EMAF+E9E E~Wuu1҉}׍&D$ |$ML$E$b1҅t9}ϋMU}u MmM+EEU,&MWEEE)EMEMEE~nEЋM}׋UEEЃ|Ή%`([~uփmv}ΉUUtMEB}(pEF4D$4$EF0F4D$F4$D$fpƀhP V BB@dE+F AH N @ F@hdxEB;BBhPPfB`BFD+F@B FB0BB}fBEBM@B,EB8B0@F@B1}MH0MHH~'M@D$E4$D$pfpD$!\4$D$peMM@EA M\@ Fp}tPEX@ @B$XM@ EEt E@EEMA\B4MJ(f EM)M}L$ul#MԉT$ L$ED$U4$T$S}x%EtM4$L$<}t EjhR``hAQN MԋBEJ`J N@NDJNR0hRd MM+MԋEH I MԉN Eԋ I F Eԋ I hpdMEt(MET9sȉ}ԋ:8 9r}ԋUE`4$WU1ɋF ЉE[^_]Í&E|E@du4%=t(d1E@ @ !EE:@%=!Et&E@txE@ @ hEt&EM1҉uԉ֍vDD$Uԉ$LD9uuԋM4$L${DED$U4$T$UU1҉uԉ։}t&X9u~HMЋ|t$|$ ED$Uԉ$cXG @tlj|$Mԉ $papfuԉ4$UUMF &E@ttE@ @ D$E $D$pl-mplF`@@@@(Q14$p~rpBkt&}K0D$4$094D$4$9,D$4$ 9ՄD$D$ D$D$4$H0D$D$ D$D$4$RH4E䉆,0@ 4$D$84@ 4$D$y8hwfL$4$`kEU BMQ EUt&E'&F+EO<M~UR UE;Uu EUE u &EԉT$ D$UT$M4$L$+NifD$ "D$E $D$plyuplAt&f EUM)‰U,"L$T$ ED$U4$T$M|$Eԉ$5Ct&fEU)€}UEԍ,"T$ D$UT$M4$L$HM&`B$E t&MN M}fAD$L$4$p~]pE $D$pl8p؋lpE+~ D$ U4$T$T$UE~ @=t|U(DžxK+~ D$ E4$D$D$U~ MlMM4$"WD$D$ NjE|$4$D$N|$D$4$'8EBD$D$ 4$p‹hBhP yE4$D$>UT$M4$L$OD$4$7ETtx tF4$kDT$$p6D$4$@M,4$D$D$i@ @t@ u륍vUS$EXsUD$D$ ED$E D$E$J$[]UWVSs\$,m$C$J?$E m$B$6:$lw$B$=a$El$B$aU@ $l$[B$`@ E؋M܍})ǃP$Hl$B$`tE$l$ANT$D$$!d$k$A|$$g$k$AT$t$$_l $k$aA|$t$$F$gWk$-At$ T$tT$$]i$!k$@t$ T$T$$'i$j$@Dt$ T$T$$h$j$@lt$ T$T$$h$j$U@t$ T$T$$h$Ij$@Tt$ T$T$$Oh$j$?t$ T$T$$h$i$?$i$?$i$?\&T$D$$}A$i$U?T$D$$kF#$8tD$ D$$BF$i$>$Wtf$h$>$W8$h$>$sO0$h$>|$t$$9$h$e>$\u0$lh$B>$*9$Lh$">$j:$,h$>$\E\[^_]Í&$Gg$=M؍[^_]Ðt&UWVSi٩$c$9$ 68$c$9$-2$c$x9$X)uJ$vc$L9$5$Vc$,9$W07[^_]$,c$9T$U T$$^'UWVShɨ,$b$8$40$b$8$,:$b$k8$V)$ab$78$0@ $7b$ 8$J$b$7$:\&P $Ua$7Ut$T$$5$a$7$VF @t(U$a$g7t$$OU4$fa$<7$3$Fa$7$U8>,[^_]Ít&$a$6$:0$`$6$V/@ 4$`$6T$U T$$z\&'UWVSlfi<$|`$R6$20$\`$26$J*:$5`$ 6$T)Fa$_$5$XTU@ $_$5$!T$U_$s5UD$ D$T$$$dE$e_$;5$SW@ uU$2_$5$SU؃3@EU$^$4$PSu0$^$4UD$D$T$ U܉$T$UT$?$^$`4|$$$b$f^$<4|$$ 1$B^$4$`0$"^$3$RE<[^_]Ðt&$]$3$NR@ E]fU$]$3$RU؋$U]$j3UD$T$$W3E`$R]$(3$Q@ t1$)]$2$QP $\$2$VQ4$\$2D$ D$t$$_a$\$r2T$U T$$IX'UWVS,[^_]Ít&$X$.$6M@EuU$X${.$MU$U|X$R.UD$ D$T$$]kfwJ$9X$.t$T$$$X$->T$U T$$S'UWVS]é,$W$-$)8$W$r-$!2$uW$K-$K)|$=W$-$KU@ $W$,$dK<$V$,D$|$$PE$V$,$%@ \$V$b,$Z08$lV$B,$$@ wC$9Q$'t$T$$$Q$&[T$U T$$LUSVëH@UWV M u}Uɉu}EuEϋuUu9v9щ1 v9vL11ɉȋMt؃ڃ ^_]Í&u 1ƋM1lj뾍ЃUuE;uv9s1뛍vuڃES]UU]At&ME +EM UuMUU ׉u։e9։Ur UM9s;ut1t&O1UVS U t&Ћu[^]US[ДTY[Possible precedence problem on bitwise %c operatorBareword "%-p" not allowed while "strict subs" in useType of arg %d to %s must be %s (not %s)Missing comma after first argument to %s functionAssignment to both a list and a scalarCan't use bareword ("%-p") as %s ref while "strict refs" in usepanic: MUTEX_LOCK (%d) [%s:%d]panic: MUTEX_UNLOCK (%d) [%s:%d]panic: no address for '%s' in '%s'Constant subroutine %s redefined'%s' trapped by operation mask%-p() called too early to check prototypeStatement unlikely to be reached (Maybe you meant system() when you said exec()?) No such class field "%s" in variable %s of type %sUseless use of %s in void contextUseless use of sort in scalar contextFound = in conditional, should be ==panic: unexpected lvalue entersub args: type/targ %ld:%lupanic: unexpected lvalue entersub entry via type/targ %ld:%luUnexpected constant lvalue entersub entry via type/targ %ld:%luCan't localize lexical variable %spanic: fold_constants JMPENV_PUSH returned %dUsing a hash as a reference is deprecatedUsing an array as a reference is deprecatedDeprecated use of my() in false conditionalValue of %s%s can be "0"; test with defined()Applying %s to %s will act on scalar(%s)Use of /g modifier is meaningless in splitMalformed prototype for %s: %-pCan't use %s for loop variableVersion number must be constant numberParentheses missing around "%s" listUseless use of %s with no valuesArray @%-p missing the @ in argument %ld of %s()Hash %%%-p missing the %% in argument %ld of %s()/%.*s/ should probably be written as "%.*s" (Maybe you should just omit the defined()?) %s argument is not a subroutine name%s argument is not a HASH or ARRAY element or a subroutine%s argument is not a HASH or ARRAY element or sliceCan't use global %c^%c%s in "%s"Can't declare class for non-scalar %s in "%s""my sub" not yet implemented$_Too many arguments for %sNot enough arguments for %sa SCALARan ARRAYa HASHa CODEConstant is not %s referenceBEGINUNITCHECKToo late to run CHECK blockINITToo late to run INIT blockPrototype mismatch: sub %-p (%-p): none vs (%.*s)op.cCan't undef active subroutine__ANON__::__ANON__autouseSubroutine %s redefined# comment %04lx %04lx XXXX %04lx XXXX %04lx %04lx %04lx %04lx %04lx FINAL$[FIELDSa constantdidsimplicit split to @_negative pattern binding (!~)a variableoops: oopsHVoops: oopsAVThat use of $[ is unsupportedlocaldo blocknon-lvalue subroutine callCan't modify %s in %sUseless localization of %sDB::postponedSTDOUTFormat %-p redefinedFormat STDOUT redefinedBareword found in conditional() operator construct&`'123456789+-@array%hashpanic: ck_splitblock or sub {}one of %.*ssubroutine entryModule name must be constantunimportattributes.pm%s[%s:%ld]Runaway prototype%s:%ld-%ldourmyCan't declare %s in "%s", @$%*[]%s%c...%c__ANONIO__defined(@array) is deprecateddefined(%%hash) is deprecatedpanic: ck_grepCORE::GLOBAL::globFile::GlobFile::Glob::csh_globmainrequireopen_INopen_OUT Can't use global %s in "%s"8)%)<<<)<<<<)<))<<<<)))))))))))))))))))<))))))))))))))8)))))))))))))))))))))))))))))))))))<)))))))))<<)<l<<<<)))))))))<<<)))))<<<<*<K<<<)))))<<))))<<<))))))))<)))K)KK)))K)))))))))KK)))))<))))))))))))))))))))))<<))))))))))))))<<))))))))))))))))))))))))))))))))))))))<))))<)))))))))<<)<)<<<<)))))))))))))))K<<<<<<<<<<<<))))))))<<)))<<)))<%&u& ! $ # #,$,$ "%# $$ $ u"]# ]# ]#]#]#]#]#]#]#]#]#]#]#]#]# ]#]# ]#]#]# k"u" &g#'=# ' &'=# |! '$$$ & t'$$ t't't' w#CCCCBBCBBBCBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCԁ́<,$Lv4ԃ\ddl4Initialization of state variables in list context currently forbiddenApanic: POPSTACK program input from stdinARGVDB::argsDB::DBDB::dblineDB::subDB::singleDB::traceDB::signal.../%s/%s/i486-linux-gnu-thread-multiPERL5DB_THREADEDuse Devel:: split(/,/,q{%s});PERL5DB %sNo directory specified for -I use no Can't use '%c' after -mname ()Missing argument to -%ceval_sv()Callback called exitrequire q%c%s%c/proc/self/exemain::FCan't stat script "%s"Setuid script not plain file No #! line#!Very long #! lineNot a perl script PHOOEY Args must match #! lineNo setuid script name Can't do setegid! Can't do seteuid! /dev/fd/%d/%s/usr/bin/sperl5.10.1main::INC%240sDB::CORE::GLOBAL::No code specified for -%c-Puse Config;linux" Built under %s\nConfig::config_vars(qw%c%s%c)/dev/nullhelpPERL5OPTCDIMUdmtwPERL5LIBPERLLIB/etc/perl/usr/local/lib/perl/5.10.1/usr/local/share/perl/5.10.1/usr/lib/perl5/usr/share/perl5/usr/lib/perl/5.10/usr/share/perl/5.10/usr/local/lib/site_perl-e/dev/fd/cc -E-CCan't open /dev/null: %s PERLCan't chdir to %sSTDINstdoutSTDERRstderr:utf8PENPERL_SIGNALSunsafePERL_SIGNALS illegal: "%s"%s had compilation errors. -v5.10.1panic: sysconf: %spanic: bad pagesize %ldperl.c%s failed--call queue abortedpanic: top_env panic: restartop %s syntax OK PERL_HASH_SEED_DEBUGHASH_SEED = %lu NoNe SuChScalars leaked: %ld No %s allowed with (suid) fdscript/5.10.1/i486-linux-gnu-thread-multiRecompile perl with -DDEBUGGING to use -D switch (did you mean -d ?) Usage: %s [switches] [--] [programfile] [arguments]-0[octal] specify record separator (\0, if no argument)Module name required with -%c optionInvalid module name %.*s with -%c option: contains single ':'"-%c" is on the #! line, it must also be used on the command line%s This is perl, %-p built for %s Copyright 1987-2009, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page. Can't emulate -%.1s on #! lineSetuid/gid script is writable by worldYOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET! FIX YOUR KERNEL, OR PUT A C WRAPPER AROUND THIS SCRIPT! Setuid script name may not begin with dash Can't change argv to have fd script Effective UID cannot exec script Can't do setuid (cannot exec sperl) $_ = join ' ', sort qw( PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP); s/(?=.{53})(.{1,53}) /$1\n /mg;print Config::myconfig(),"\nCharacteristics of this binary (from libperl): \n Compile-time options: $_\n", Compiled at Apr 23 2010 08:02:38\n"; $"="\n "; @env = map { "$_=\"$ENV{$_}\"" } sort grep {/^PERL/} keys %ENV; print " \%ENV:\n @env\n" if @env;print " \@INC:\n @INC\n";Unrecognized switch: -%s (-h will show valid options)Illegal switch in PERL5OPT: -%cWrong syntax (suid) fd script name "%s" Missing (suid) fd script name /^\s*#(?!\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\b)/||!($|=1)||print(1../^#!.*perl/i)|/^\s*#(?!\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\b)/||!($|=1)||print%s -ne%s%s%s %s | %-p %s %-p %sCan't open perl script "%s": %s Can't ignore signal CHLD, forcing to defaultNo Perl script found in input Execution of %s aborted due to compilation errors. panic: sysconf: pagesize unknownpanic: pthread_key_create failed panic: pthread_setspecific (%d) [%s:%d]panic: MUTEX_INIT (%d) [%s:%d]panic: MUTEX_DESTROY (%d) [%s:%d]BEGIN failed--compilation abortedUnbalanced scopes: %ld more ENTERs than LEAVEs Unbalanced saves: %ld more saves than restores Unbalanced tmps: %ld more allocs than frees Unbalanced context: %ld more PUSHes than POPs Unbalanced string table refcount: (%ld) for "%s"-a autosplit mode with -n or -p (splits $_ into @F)-C[number/list] enables the listed Unicode features-c check syntax only (runs BEGIN and CHECK blocks)-d[:debugger] run program under debugger-D[number/list] set debugging flags (argument is a bit mask or alphabets)-e program one line of program (several -e's allowed, omit programfile)-E program like -e, but enables all optional features-f don't do $sitelib/sitecustomize.pl at startup-F/pattern/ split() pattern for -a switch (//'s are optional)-i[extension] edit <> files in place (makes backup if extension supplied)-Idirectory specify @INC/#include directory (several -I's allowed)-l[octal] enable line ending processing, specifies line terminator-[mM][-]module execute "use/no module..." before executing program-n assume "while (<>) { ... }" loop around program-p assume loop like -n but print line also, like sed-P run program through C preprocessor before compilation-s enable rudimentary parsing for switches after programfile-S look for programfile using PATH environment variable-t enable tainting warnings-T enable tainting checks-u dump core after parsing program-U allow unsafe operations-v print version, subversion (includes VERY IMPORTANT perl info)-V[:variable] print configuration summary (or a single Config.pm variable)-w enable many useful warnings (RECOMMENDED)-W enable all warnings-x[directory] strip off text before #!perl line and perhaps cd to directory-X disable all warnings split(/,/,q)2        22  2                             2  '                        :  r   2   [        I 7   L   OU` N  . :utf8:utf8:utf8:utf8Y100000000000050000000000000000005000000000000-5005000000000000000000555500 400050030013515500000000505501055005550500515551Apanic: gv name too long (%lu)VERLOADTF8LOCALEARNING_BITSBad symbol for hashBad symbol for arrayBad symbol for scalaroverloadingin overloaded package has no overloaded magic left TIEHASH (Did you mean &%s instead?) ::ErrnoTie::Hash::NamedCaptureHad to create %s unexpectedlyXPORTAnyDBM_File::ISANDBM_FileDB_FileGDBM_FileSDBM_FileODBM_FileHILD_ERROR_NATIVENCODINGREMATCHOSTMATCHTF8CACHE$%c is no longer supportedFileHandle::IO::Handle::filehandledirhandleBad symbol for %s%s::_GEN_%ldUNIVERSAL%s::SUPERniloverloadCan't resolveStub found while resolving(${}(@{}(%{}(*{}(&{}(++(--(!(=(abs(neg(<>(int(<(<=(>(>=(==(!=(lt(le(gt(ge(eq(ne(+(+=(-(-=(*(*=(/(/=(%(%=(**(**=(<<(<<=(>>(>>=(&(&=(|(|=(^(^=(~(atan2(cos(sin(exp(log(sqrt(x(x=(.(.=(~~dddddddddD, Lԛ4ܚԛ4ܚ* ۠c 7RCC((ɳ1ײOFFFFFFFFOFlOO AUTOLOAD444444555555Name "%s::%s" used only once: possible typoAttempt to free unreferenced glob pointers, Perl interpreter: 0x%pCannot convert a reference to %s to typeglob, right argument in overloaded package , right argument has no overloaded magicOperation "%s": no method found,%sargument %s%s%s%sCopy method did not return a referencepanic: Can't use %%%c because %-p is not availablepanic: Can't use %%%c because %-p does not support method %sVariable "%c%s" is not importedGlobal symbol "%s%s" requires explicit package nameCan't use anonymous symbol table for method lookupCan't locate package %-p for @%s::ISAUse of inherited AUTOLOAD for non-method %s::%.*s() is deprecated%s method "%.256s" overloading "%s" in package "%.256s"$||||||\||||||<\|,d s Q 6 q \ !! "!l!L!,! ! l <  |\<|L <l,lDDTD\ |,DY< \ LlL\  D t , \<|T7#"x"A"#"q#$$w$G$$#our @F=split(qAś}Ñ͔XkkkbkkkkVkkkkkkkkkkkkbkkkkkaVQ"uSKS{-BBBBBBBBBBBBBBBBBBBBBBBBBB`B"BBBBBBBBBBBBBBBBBBBBBBtBB@KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKaKyKKKKKKKKKKKKKKPߠڞڞڞʝڞڞڞڞc=֜a;ߛaΙ;ȚUԘїh>BsiUŒRzDݐ+1ŽъuAӪ@ ԩA 7ۧtN{¥%Ĥ7գy Y3Ʈ>׭j4Ǭ{Eޫ1ɱb,oIIJOO-ONNxx^v8vvuOuu utt&tss!srmrqDqpl%lkk1kj\jiimiihAfee}eedb:`__b_<__^^^~^H^]t]N](]\\\[[k[E[[ZZiZZboIuO~ъ{~U~/~ ~}}}q}}|u||{{2{ {z>zyjy-yyх>DŽ9݃KӂƁMM"uuxx cccccccccc cc { q cce [ cccccccccQ E ; 1 %  ccc  ccccc`?@@ @0@Number too longcomma-less variable listIdentifier too longnext token ???within stringwithin patternnext char ^%c\%03o at %s line %ld, near "%.*s" %-p%s has too many errors. at end of lineat EOFUse of %s is deprecatedcharnamesundefConstant(%s) unknown: %s} is not definedConstant(%s): %s%s%sPropagatedCall to &{$^H{panic: scan_numMisplaced _ in numberIllegal octal digit '%c'Illegal binary digit '%c'Integer overflow in %s number%s number > %s non-portableinteger+-0123456789_floatsayelseif should be elsif;&/|})]oaiuwef!=No comma allowed after %s ;readpipe([{< )]}> )]}>msixopgcmsixopSearch pattern not terminated[#!%*<>()-=])} =wds]rnftbxcavaA01! zZ79~[\]^_?{...}[...]L\uU\lpanic: yylexqr:'{$()| \%c better written as $%clLuUEQMissing right brace on \x{}Missing right brace on \N{}Missing braces on \N{}qqFormat not terminateduse feature ':5.10';LINE: while (<>) {chomp;our @F=split(%s);our @F=split(' ');;}continue{print;}=cutperl -indirCan't exec %sToo late for "-%.*s" optionpanic: input overflow:uniquelvaluelockedUnterminated attribute listsyntax errorUnmatched right curly bracket+-*/%.^&|<Reversed %c= operator!=~ should be !~bare << to mean <<""Excessively long <> operatorUnterminated <> operatorGlob not terminatedreadline{$:+-Array lengthScalarFinal $ should be \$ or $nameSIGYou need to quote "%s"$@"'`q&*<%Array $#+-'"studyNumberStringBackticksBackslashmsyqqwxrCOREqualify as such or use &Bad name after %s%sBareword%s::DATA:encoding(%-p)CORE::%s is not a keywordMissing $ on loop variable__PACKAGE__No such class %.1000s|&*+-=!?:.<> should be quotesmsixopgceeval do subroutine namesort is now a reserved wordMissing name in "my sub"Prototype not terminated$@%*;[]&\_0377777777770xffffffffBinaryOctalHexadecimaloctalhexadecimalInteger overflow in decimal number (Might be a runaway multi-line %c%c string starting on line %ld) (possibly a missing "use charnames ...")}} did not return a defined value%s found where operator expected (Missing semicolon on previous line?) (Do you need to predeclare %.*s?) (Missing operator before %.*s?) %s (...) interpreted as functionWarning: Use of "%.*s" without parentheses is ambiguousCan't find string terminator %c%s%c anywhere before EOF;}continue{print or die qq(-p destination: $!\n);}"%s" not allowed in expressionSearch pattern not terminated or ternary operator parsed as search patternUse of /c modifier is meaningless without /gTransliteration pattern not terminatedTransliteration replacement not terminatedfilter_del can only delete in reverse order (currently)Ambiguous use of %c{%s%s} resolved to %c%s%sAmbiguous use of %c{%s} resolved to %c%sNo package name allowed for variable %s in "our"Can't use "my %s" in sort comparisonPossible unintended interpolation of %s in stringBad evalled substitution patternInvalid range "%c-%c" in transliteration operatorAmbiguous range in transliteration operatorUnrecognized escape \%c passed throughMissing control char name in \cpanic: constant overflowed allocated spaceUnrecognized character \x%02X in column %dMissing right curly or square bracketBEGIN { require 'perl5db.pl' };Unsupported script encoding UTF32-LEUnsupported script encoding UTF32-BEUnterminated attribute parameter in attribute listThe 'unique' attribute may only be applied to 'our' variablesInvalid separator character %c%c%c in attribute listUnmatched right square bracketDelimiter for here document is too longMultidimensional syntax %.*s not supportedScalar value %.*s better written as $%.*sCan't use \%c to mean $%c in expressiondump() better written as CORE::dump()Ambiguous call resolved as CORE::%s(), %sBareword "%s" refers to nonexistent packageAmbiguous use of -%s resolved as -&%s()Operator or semicolon missing before %c%sAmbiguous use of %c resolved as operator %cpanic: snprintf buffer overflowPrecedence problem: open %.*s should be open(%.*s)Possible attempt to separate words with commasPossible attempt to put comments in qw() listSubstitution pattern not terminatedSubstitution replacement not terminatedUse of /c modifier is meaningless in s///Illegal character in prototype for %-p : %sIllegal declaration of anonymous subroutineIllegal declaration of subroutine %-p0b11111111111111111111111111111111zDA"do" to call subroutinesllzT&l9u'j߿^TUe !llcE'lqg[OMAl5+ E l_lY.ll]_lCHoUC h'BQ~_<i2llllzpG$vx\f5&\*ll X6fDֽY#5TVTc,19O_`rd+#Wd dW[+  kdW;6?QKZppppp**W"MTW-wwqS)uPXYdpp"%l/.]fyTV\_nIptM XW BED N !"#$%&'()*+,-./0123456789:;<=>?@ACFGHIJKLOPQRSTUVYg=u|!"#$%E() 4 `=>?C7 <@?"#$%"#()uKw{|}~9>?@>?@=> a fRSV>?@-XX78XyzX8<?BXDBFGHIJXOX>?@>?@XW:c>?@X>?@>?@"Y>?@'XX>?@W>?@X>?@QRSXVX>?@"XW$'B:>?@X~>?@>?@X!#XW(WYX<< F>?@ O !>?@%&'()+,-./WWe456789;XA>?@@>?@WMNOXWWWTUWXW>?@WBJ:WW >?@Y>?@0123W)W+,-./WWW456789W;HIJKLAXWQRSWVeMNO/#TUCX C>?@ !%23)+,-./W456789;>?@LAQRSVMNOTUWWX LQRSV0123)+,-./456789;IJKLAQRSVMNOTUX  0123)+,-./456789;JKLAQRSVMNO2TUX LQRSV0123)+,-./456789;KLAQRSVMNO0123TUX !%*KL0123QRSV>?@BCDEFGHIJKLQRSVW 023)+,-./456789;KLAQRSVMNO23TUX KLQRSV)+,-./456789;AMNOTUX  !%)+,-./456789;>?@AMNOTUWX )+,-./456789;AMNOTUWX )+,-./456789;AMNOTUWX )+,-./456789;AMNOTUWX )+,-./456789;AMNOTUWX )+,-./456789;AMNOTUWX )+,-./456789;AMNOTUWX )+,-./456789;AMNOTUWX )+,-./456789;AMNOTUX !%*0123>?@BCDEFGHIJKLbdQRShVWxy*0123CDEFGHIJKLQRS*V0123CDFGHIJKLQRS*V0123DFGHIJKLQRS*V0123FGHIJKLQRSVPLooooo%ooi49!W#!yo(!"#Gqrstuv`HRjkFFTbdxfg Qwsl{|& S}7}qZ ]~1$*6=?AU E:      KLNXpXC+^.  " !"#$%&'()*+m,-./!0123456789:;<=<IB*>?@ABCDDFOE V\FGHc_`aIJbeKdP;o ihwP !"#$%'()*+n,-./tuv z89:;<=j>?@ABCkDEMFGHzf[IJK !"#$%'()*+,-./89:;<=r>?@ABCDEFGHIJK !"#$%()*+m,-./89:;<=>?@ABCDEFGHIJK !"#$%'()*+!,-.l/m89:;<=>?@ABCDEFGHIJK !"#$%()*+,-./F89:;<=>?@ABCDEddFGHIJKdddddddddddddddddddddddddddddh !"#$%'()*+,-./F89:;<=>?@ABCDEFGHIJK !"#$%'()*+,-./89:;<=>?@ABCDEFGHIJK !"#$%'()*+,-./89:;<=>?@ABCDEFGHIJK !"#$%'()*+,-./89:;<=>?@ABCDEFGHIJK !"#$%'()*+,-./89:;<=>?@ABCDEFGHIJK !"#$%'()*+,-./89:;<=>?@ABCDEFGHIJK !"#$%'()*+,-./89:;<=>?@ABCDEFGHIJK !"#$%'()*+,-./89:;<=>?@ABCDEFGHIJ>K !"#$%'()*+,-./89:;<=>?@ABCDEFGHIJ@K !"#$%'()*+,-./89:;<=>?@ABCDEFGHIJMK !"#$%'()*+,-./89:;<=>?@ABCDEGGFGHIJKGGGGGGGGGGGGGGGGGGGGGGGG|~GGGGGJF 34CAAA;  :57689>OBB TW=DENE Eĭ^̹™(U?@BX*0123CDFGHIJKLQRSVX\}}bX\}]]]]]]X]]WWXXW<W\nWXW<~~W~mnonqdlop]^oWBWWWWWEWXW\W\WWWWXWooWWWWWkk``o`mWW`W``a"#eeWh``hhb`X`khohpWW``eAPADNAME = 0x%lx(0x%lx) PAD = 0x%lx(0x%lx) %2d. 0x%lx<%lu> FAKE "%s" flags=0x%lx index=%lu %2d. 0x%lx<%lu> (%lu,%lu) "%s" "%s" variable %s masks earlier declaration in same %s (Did you mean "local" instead of "our"?) Variable "%s" is not availableVariable "%s" will not stay shared%2d. 0x%lx<%lu> panic: pad_free curpadpanic: pad_free popanic: pad_swipe curpadpanic: pad_swipe popanic: pad_alloc%-p never introducedscope"our" variable %s redeclaredpad.cregcomp.cpanic: pregfree comppadpanic: regfree data code '%c'Regexp%s in regex m/%.*s%s/alphspacgrapasciblancntralnuloweuppedigiprinpuncPOSIX class [:%.*s:] unknownEmpty \%c{}Missing right brace on \%c{}%cutf8::%.*s %04lx %04lx AlnumBlankXDigitVertSpaceHorizSpaceASCIIInvalid [::] classInvalid [] range "%*.*s"%cutf8::Is%s Unterminated verb patternACCEPTCOMMITPRUNEUnknown verb pattern '%.*s'Sequence (?R) not terminatedIllegal patternExpecting close bracketnopSequence (? incompletedon't ?-Useless use of (?-p)Unmatched (Unmatched )Junk on end of regexpUnmatched [Internal urpQuantifier follows nothingReference to invalid group 0Unterminated \g... patternUnterminated \g{...} patternTrailing \Internal disasterCan't do {n,m} with n > mNested quantifierstuE_TRIE_MAXBUFPERL_RE_COLORSPanic opt closeRegexp out of spacemsixregcompSUCCEEDEOSMEOLSEOLNBOUNDNBOUNDLREG_ANYSANYCANYANYOFNALNUMNALNUMLNSPACENSPACELNDIGITNDIGITLCLUMPBRANCHBACKEXACTEXACTFEXACTFLNOTHINGSTARPLUSCURLYCURLYNCURLYMCURLYXWHILEMOPENCLOSEIFMATCHUNLESSMSUSPENDIFTHENLONGJMPBRANCHJMINMODLOGICALRENUMTRIETRIECAHOCORASICKAHOCORASICKCGOSUBGOSTARTNREFNREFFNREFFLNGROUPPINSUBPDEFINEPENDLIKEOPFAILVERBMARKPOINTCUTGROUPKEEPSLNBREAKNVERTWSNHORIZWSFOLDCHAROPTIMIZEDPSEUDOTRIE_nextTRIE_next_failEVAL_ABEVAL_AB_failCURLYX_endCURLYX_end_failWHILEM_A_preWHILEM_A_pre_failWHILEM_A_minWHILEM_A_min_failWHILEM_A_maxWHILEM_A_max_failWHILEM_B_minWHILEM_B_min_failWHILEM_B_maxWHILEM_B_max_failBRANCH_nextBRANCH_next_failCURLYM_ACURLYM_A_failCURLYM_BCURLYM_B_failIFMATCH_AIFMATCH_A_failCURLY_B_min_knownCURLY_B_min_known_failCURLY_B_minCURLY_B_min_failCURLY_B_maxCURLY_B_max_failCOMMIT_nextCOMMIT_next_failMARKPOINT_nextMARKPOINT_next_failSKIP_nextSKIP_next_failCUTGROUP_nextCUTGROUP_next_failKEEPS_nextKEEPS_next_failANCH_BOLANCH_MBOLANCH_SBOLANCH_GPOSGPOS_SEENGPOS_FLOATUNUSED_BIT_6UNUSED_BIT_7START_ONLYMULTILINESINGLELINEFOLDEXTENDEDKEEPCOPYLOOKBEHIND_SEENEVAL_SEENCANY_SEENNOSCANCHECK_ALLMATCH_UTF8USE_INTUIT_NOMLUSE_INTUIT_MLINTUIT_TAILSPLITCOPY_DONETAINTED_SEENNULLpanic: re_dup unknown data code '%c'panic: reg_node overrun trying to emit %dpanic: Unknown flags %d in named_buff_iterpanic: Unknown flags %d in named_buff_scalarpanic: Unknown flags %d in named_buffSequence (?#... not terminatedpanic: no svname in reg_scan_nameReference to nonexistent named group%s in regex; marked by <-- HERE in m/%.*s <-- HERE %s/panic: bad flag in reg_scan_nameConstant(\N{%s}) unknown: (possibly a missing "use charnames ...")Constant(\N{%s}): $^H{charnames} is not definedConstant(\N{%s}): Call to &{$^H{charnames}} did not return a defined valueIgnoring excess chars from \N{%s} in character class in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Ignoring zero length \N{%s} in character class in regex; marked by <-- HERE in m/%.*s <-- HERE %s/POSIX syntax [%c %c] belongs inside character classes in regex; marked by <-- HERE in m/%.*s <-- HERE %s/POSIX syntax [%c %c] is reserved for future extensionsInvalid escape in the specified encodingUnrecognized escape \%c in character class passed through in regex; marked by <-- HERE in m/%.*s <-- HERE %s/False [] range "%*.*s" in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Unterminated verb pattern argumentVerb pattern '%.*s' may not have an argumentVerb pattern '%.*s' has a mandatory argumentSequence %.3s... not terminatedSequence (%.*s...) not recognizedSequence (?%c... not terminatedpanic: reg_scan_name returned NULLpanic: paren_name hash element allocation failedSequence (?%c...) not implementedReference to nonexistent groupSequence (?{...}) not terminated or not {}-balancedEval-group not allowed at runtime, use re 'eval'Eval-group in insecure regular expressionSequence (?(%c... not terminatedSwitch condition not recognized(?(DEFINE)....) does not allow branchesSwitch (?(condition)... contains too many branchesUnknown switch condition (?(%.2sUseless (%s%c) - %suse /%c modifier in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Useless (%sc) - %suse /gc modifier in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Sequence %.2s... not terminatedReference to nonexistent or unclosed groupUnrecognized escape \%c passed through in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Quantifier in {,} bigger than %d%.*s matches null string many times in regex; marked by <-- HERE in m/%.*s <-- HERE %s/error creating/fetching widecharmap entry for 0x%lXpanic! In trie construction, no char mapping for %ldQuantifier unexpected on zero-length expressionVariable length lookbehind not implementedLookbehind longer than %lu not implemented in regex m/%.*s%s/d////////////////////////t//m(|'%%%%%%%%%%%%%%%%%\'%%%%%%%%&|&%%(%(iYiYiYiYiYiYiYiYiYiYUUUUUUUUUU_YUUUXUUUUUXU:XUUWUUZZUUUUUUUUUZLY#YYYXUZUUUUUZU:XUwZmZZUZZgV_^^s^N_/__]]\X]`\]\]"\]\9]A\w]\\\[[[[k[ZWW@[`^m_^JrTTTrTTqqTrzrrTTTT#qT}puuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu0uayuuu uu_wuEykwc0uuuuuuuuuuuuuuuu_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuTvvvvvvvfvvvvvvvvTvvvv~GV|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|V|߉V|vvv͋vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvGvvv-vvvvv-vvvvvvtwQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ QQ QQ QQ Q Q QQ Q QQQQQQ g bP QQ QQ>Q Q, tQ Q QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ<`5 |pY9-ӯh߯g:}(  !!!$$&'((((,-.///88886789:;8====AB///FGHIIILLLLLLRSTUVWX$Z==99++,,,,,,,,,,****22((((((PPNNOOQQRR &'(+/01,*)854CDETUVW  =!<,>%5lu %s %cx{%lx}%c%03o%c%o\0WILDSV_UNDEFSV_NOSV_YESSV_PLACEHOLDER<%lu%s>CV(%s)(null)[%s] [UTF8 "%s"](%g)(%ld) [tainted](NULL)[%lu]NULL OP IN RUN%*s%s = 0x%lx "%s" :: " "%s" { GV_NAME = %s-> %s%-4lu %*sTYPE = %s ===> (%lu) DONE (was %s) LINE = %lu PACKAGE = "%s" LABEL = "%s" TARG = %ld ,VOID,SCALAR,LIST,UNKNOWN,KIDS,PARENS,STACKED,REF,MOD,SPECIAL,LATEFREE,LATEFREED,ATTACHED,TARGET_MY,REFCOUNTED,COMMON,BACKWARDS,SQUASH,DELETE,COMPLEMENT,IDENTICAL,GROWS,DOLIST,AMPER,DB,HASTARG,NOPAREN,INARGS,NOMOD,SV,AV,HV,MAYBE_LVSUB,LVAL_DEFER,STRICT_REFS,OUR_INTRO,BARE,STRICT,ARYBASE,WARNING,ENTERED,LINENUM,INTRO,EARLY_CV,GUESSED,SLICE,EXISTS_SUB,NUMERIC,INTEGER,REVERSE,IN_RAW,IN_CRLF,OUT_RAW,OUT_CRLF,EXIT_VMSISH,HUSH_VMSISH,FT_ACCESS,FT_STACKEDPRIVATE = (%s) PADIX = %ld REDO ===> NEXT ===> LAST ===> OTHER ===> REFCNT = %lu {} (RUNTIME)PMf_PRE %c%s%c%s PMf_PRE (RUNTIME) PMf_REPL = ,ONCE:USED,TAINTED,SCANFIRST,ALL,SKIPWHITE,CONST,KEEP,GLOBAL,CONTINUE,RETAINT,EVALPMFLAGS = (%s) FORMAT %s = SUB %s = (xsub 0x%lx %d) SV = 0 PADSTALE,PADTMP,PADMY,TEMP,OBJECT,GMG,SMG,RMG,ROK,WEAKREF,OOK,FAKE,READONLY,BREAK,OVERLOAD,pIOK,pNOK,pPOK,PCS_IMPORTED,SCREAM,ANON,UNIQUE,CLONE,CLONED,CONST,NODEBUG,COMPILED,LVALUE,METHOD,LOCKED,WEAKOUTSIDE,SHAREKEYS,LAZYDEL,HASKFLAGS,REHASH,CLONEABLE,INTRO,MULTI,ASSUMECV,IN_PAD,IMPORTALL, SV AV HV CV ),TAIL,VALID,EVALED,IsUV,TYPED,OUR,STATE,SV = %s%s UNKNOWN(0x%lx) %s UV = %lu IV = %ld (OFFSET) COP_LOW = %lu COP_HIGH = %lu NV = %.*g RV = 0x%lx PV = 0x%lx ( %s . ) CUR = %ld LEN = %ld PV = 0 OURSTASH STASH ARRAY = 0x%lx (offset=%ld) ALLOC = 0x%lx FILL = %ld MAX = %ld ARYLEN = 0x%lx ,REAL,REIFY FLAGS = (%s) Elt No. %ld (%d%s:%d hash quality = %.1f%% KEYS = %ld RITER = %ld EITER = 0x%lx PMROOT = 0x%lx NAME = "%s" BACKREFS = 0x%lx Elt %s [UTF8 "%s"] [REHASH] HASH = 0x%lx PROTOTYPE = "%.*s" COMP_STASH START = 0x%lx ===> %ld ROOT = 0x%lx XSUB = 0x%lx XSUBANY = 0x%lx (CONST SV) XSUBANY = %ld GVGV::GV DEPTH = %ld OUTSIDE_SEQ = %lu LINES = %ld PADLIST = 0x%lx ANONMAINUNIQUEUNDEFINED OUTSIDE = 0x%lx (%s) TYPE = %c TARGOFF = %ld TARGLEN = %ld TARG = 0x%lx FLAGS = %u RARE = %u PREVIOUS = %lu USEFUL = %ld NAMELEN = %ld GvSTASH GP = 0x%lx SV = 0x%lx REFCNT = %ld IO = 0x%lx FORM = 0x%lx AV = 0x%lx HV = 0x%lx CV = 0x%lx CVGEN = 0x%lx LINE = %ld FILE = "%s" FLAGS = 0x%lx EGV IFP = 0x%lx OFP = 0x%lx DIRP = 0x%lx PAGE = %ld PAGE_LEN = %ld LINES_LEFT = %ld TOP_NAME = "%s" TOP_GV TOP_GV = 0x%lx FMT_NAME = "%s" FMT_GV FMT_GV = 0x%lx BOTTOM_NAME = "%s" BOTTOM_GV BOTTOM_GV = 0x%lx TYPE = '%c' TYPE = '\%o' MAGIC = 0x%lx envenvelemsigsigelempackelemmglobnkeystaintsubstrposbmfmuvardefelemcollxfrmamagicamagicelemarylen_phintselem MG_VIRTUAL = &PL_vtbl_%s MG_VIRTUAL = 0 MG_PRIVATE = %d MG_TYPE = PERL_MAGIC_%s MG_TYPE = UNKNOWN(\%o) MG_FLAGS = 0x%02X TAINTEDDIR REFCOUNTED GSKIP MINMATCH MG_OBJ = 0x%lx PAT = %s MG_LEN = %ld MG_PTR = 0x%lx => HEf_SVKEY ???? - please notify IZ %2ld: %lu -> %lu MG_VIRTUAL = 0x%lx BINDRVPVPVIVPVNVPVMGPVGVPVLVPVAVPVHVPVCVPVFMPVIOsv(\0)arylen(#)rhash(%)pos(.)symtab(:)backref(<)arylen_p(@)overload(A)bm(B)regdata(D)env(E)hints(H)isa(I)dbfile(L)shared(N)tied(P)sig(S)uvar(U)overload_elem(a)overload_table(c)regdatum(d)envelem(e)fm(f)regex_global(g)hintselem(h)isaelem(i)nkeys(k)dbline(l)shared_scalar(n)collxfrm(o)tiedelem(p)tiedscalar(q)qr(r)sigelem(s)taint(t)uvar_elem(u)vec(v)vstring(V)utf8(w)substr(x)defelem(y)ext(~)WATCHING, %lx is currently %lx WARNING: %lx changed from %lx to %lx (0x%lx) at 0x%lx %*s REFCNT = %ld %*s FLAGS = (\[[[d[d[d[==tML<܋܋|<<?B|tld\TLD<4,$ ܿԿ̿Ŀ<<<<<<<<<<<<<<<<<<<<<<<<<|<<<<<<<t<<<<<l/dev/urandomPRINT at %s line %ldchunk, <%s> %s %ld during global destructionclosedunopenedsocket%s%s on %s %s %s%s%s on %s %sPERL_HASH_SEEDInvalid version objectv%ld.%ld.0width%d.%0*d_%d%0*doriginalInteger overflow in versionv.Infvinf, '.' not in PATH on PATHexecuteCan't %s %s%s%sEXECInsecure %s%sCan't forkpanic: kid popen errno readutil.c%.9fpanic: pthread_setspecificFilehandle %s opened only for %sputFilehandle opened only for %sput (Are you trying to call %s%s on dirhandle %s?) (Are you trying to call %s%s on dirhandle?) panic: my_vsnprintf buffer overflowpanic: my_snprintf buffer overflowYour random numbers are not that randomUnknown Unicode option letter '%c'Unknown Unicode option value %luInvalid version format (underscores before decimal)Invalid version format (multiple underscores)Invalid version format (alpha without decimal)Invalid version format (misplaced _ in number)Integer overflow in version %dVersion string '%s' contains invalid data; ignoring: '%s'Signal SIG%s received, but no signal handler set. SIG%s handler "%s" not defined. Maximal count of pending signals (%lu) exceededAttempt to set length of freed arrayFETCHSIZE returned a negative valuesignoCHLDCLDassigning to $^Oopen>open<mg.cCLEARSTOREEXISTSFETCHFIRSTKEYNEXTKEYFETCHSIZE__DIE____WARN__No such hook: %sNo such signal: SIG%sIGNOREDEFAULTUUUUUUUUUUUUwarnings::Bitspanic: magic_len: %ldSize magic not implemented\HfH\HvINaN0O\HN~K\H\H\HH\H7JN\H\H\H$IK\HJO\H\H\H\H\H\H\H\H\HJ\H\H\HQHIBIL\H\HLOOQAPKKKKKKKKKK\HlQGQRN\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H$RO\HI\HH\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\H\HQ\H1L<ԓ<̏lD<<<~`panic: pp_matchNot %s referenceOut of memory during array extenda HASHan ARRAYBizarre SvTYPE [%ld]sv.csv_vcatpvfnVSTRINGLVALUEGLOBFORMATpanic: del_backrefBad filehandle: %sBad filehandle: %-ppanic: frexp"%%%c""%%\%03lo"end of string{%s}within ${$/} in NULLREFBizarre copy of %s in %sBizarre copy of %sCannot copy to %s in %sCannot copy to %sSubroutine %s::%s redefinedCan't upgrade %s (%lu) to %luCan't weaken a nonreferenceReference is already weakNot a subroutine referencepanic: sv_insertArgument "%s" isn't numericcat_decodeWide character in %sWide characterCLONE_SKIPWide character in $/Cloning substitution context is unimplementedpanic: ss_dup inconsistency (%ld)Integer overflow in format string for %sinternal %%p might conflict with future printf extensionsvector argument not supported with alpha versionsInvalid conversion in %sprintf: panic: attempt to copy value %-p to a freed scalar %ppanic: attempt to copy freed scalar %p to %pConstant subroutine %s::%s redefinedUndefined value assigned to typeglobsemi-panic: attempt to dup freed stringsv_upgrade from type %d down to type %dpanic: sv_upgrade to unknown type %luDESTROY created new reference to dead object '%s'Attempt to free unreferenced scalar: SV 0x%lx, Perl interpreter: 0x%ppanic: magic_killbackrefs (flags=%lx)panic: utf8_mg_pos_cache_update cache %lu real %lu for %-ppanic: sv_pos_b2u: bad byte offsetpanic: sv_pos_b2u cache %lu real %lu for %-ppanic: sv_pos_u2b_cache cache %lu real %lu for %-ppanic: sv_len_utf8 cache %lu real %lu for %-pDon't know how to handle magic of type \%oUnable to create sub named "%-p"Can't bless non-reference valuepanic: reference miscount on nsv in sv_replace() (%lu != 1)Can't coerce %s to number in %sCan't coerce %s to integer in %sCan't coerce readonly %s to string in %sCan't coerce readonly %s to stringCan't coerce %s to string in %spanic: sv_chop ptr=%p, start=%p, end=%ppanic: sv_chop ptr=%p (was %p), start=%p, end=%pCan't modify non-existent substringpanic: sv_setpvn called with negative strlenWATCHING: %lx cloned as %lx with value %lx Argument "%s" isn't numeric in %sInvalid argument to sv_cat_decode$aBT  LLLaNLLaNl4LL, l d \ T L 4R3R3t4R3R3R3R3R3R3R34R3\4R3R3<4F5^FCCC5555555JH555556H55'H555555555F7GcFCCC5cF5555GGH55^H5I55'Ha a aaHTT_(null)?OAA panic: unimplemented op %s (#%d) calledsplice() offset past end of arrayOdd number of elements in anonymous hashpanic: avhv_delete no longer supportedAttempt to use reference as lvalue in substrConstant subroutine %s undefinedAttempt to bless into a referenceExplicit blessing to '' (assuming package main)Can't find an opnumber for "%s"Can't return array to lvalue scalar contextCan't return hash to lvalue scalar contextpanic: pp_splitSplit loopSPLICENot a HASH referencesprintfsubstr outside of stringIllegal modulus zeroIllegal division by zeroCan't take %s of %g(anonymous)do_study: out of memoryILEHANDLE*glob{FILEHANDLE}AMEACKAGECORE::_;$CORE::backtick?$@@%&*$Not a SCALAR referenceNot a GLOB referencea symbolA????????~` -cUse of -l on filehandle %slstatWide character in printUnrecognized signal name "%s"sysopenUnknown open() mode '%.*s'Missing command in piped openCan't open bidirectional pipeecho ARGVOUTinplace openCan't open %s: %sBad arg length for %s, is %lu, should be %ldWarning: unable to close filehandle %s properly. panic: sysopen with multiple argsMore than one argument to '%c&' openMore than one argument to '>%c' openMore than one argument to '<%c' openFilehandle STD%s reopened as %s only for inputFilehandle STDIN reopened as %s only for output|tr -s ' ' '\012\012\012\012'|Can't do inplace edit: %s is not a regular fileCan't rename %s to %-p: %s, skipping fileCan't remove %s: %s, skipping fileCan't do inplace edit on %s: %sLMNThe stat preceding -l _ wasn't an lstatUUUA͆Infinite recursion in regexREGMARK%s limit (%d) exceeded%lx %d regexp memory corruptioncorrupted regexp pointersREGERRORpanic: unknown regstclass %dNULL regexp parametercorrupted regexp programMalformed UTF-8 character (fatal)panic: paren_elems_to_push < 0Pattern subroutine nesting without pos change exceeded limit in regexEVAL without pos change exceeded limit in regexComplex regular subexpression recursionl#" ,!d%$$D$%##d!d#!$!\ G3j:kkSkjZ#ZZEEEEYYYuK,[EEbD[DCCAA)A"Ag@`@WZ@=aB~B==Y`a;_>_^j])]\>>>\K\[iP7PP?PPOR;MMR;R;LL>>= Internals::HvREHASH $hashrefUsage: %s::%s(%s)Usage: %s(%s)Usage: CODE(0x%lx)(%s)$lastkey$key, $flags$key, $value, $flagsmsixpname[, all ][all]filehandle[,args]inputoutputdetails%-p(%-p)sv, failok=0class, versionv%sobject-ref, methodUNIVERSAL::isaUNIVERSAL::canUNIVERSAL::DOESUNIVERSAL::VERSIONversion::()version::newversion::parseversion::(""version::stringifyversion::(0+version::numifyversion::normalversion::(cmpversion::(<=>version::vcmpversion::(boolversion::booleanversion::(nomethodversion::noopversion::is_alphaversion::qvversion::declareversion::is_qvutf8::is_utf8utf8::validutf8::encodeutf8::decodeutf8::upgradeutf8::downgradeutf8::native_to_unicodeutf8::unicode_to_native\[$%@];$Internals::SvREADONLYInternals::SvREFCNT\%*;@PerlIO::get_layersRegexp::DESTROYInternals::hash_seedInternals::rehash_seedInternals::HvREHASHre::is_regexp;$$re::regnamere::regnamesre::regnames_countre::regexp_patternUsage: invocant->DOES(kind)lobjlobj is not of type versionlobj, ...(undef)reference, kindNULL array element in re::regnames()get_layers: unknown argument '%s'Internals::hv_clear_placeholdersTie::Hash::NamedCapture::FETCHTie::Hash::NamedCapture::STORETie::Hash::NamedCapture::DELETETie::Hash::NamedCapture::CLEARTie::Hash::NamedCapture::EXISTSTie::Hash::NamedCapture::FIRSTKEYTie::Hash::NamedCapture::NEXTKEYTie::Hash::NamedCapture::SCALARTie::Hash::NamedCapture::flagsoperation not supported with version objectCannot find version of an unblessed reference%s does not define $%s::VERSION--version check failed%s defines neither package nor VERSION--version check failed%s version %-p required--this is only version %-puniversal.c$reference@attributesshareuniquattributes::bootstrap$moduleattributes::_modify_attrsattributes::_guess_stashattributes::_fetch_attrsattributes::reftypeA variable may not be unsharedxsutils.c Use of uninitialized value%s%s%sSemicolon seems to be missingUnquoted string "%s" may clash with future reserved wordUnsuccessful %s on filename containing newlineCan't use %s ref as %s refCan't use string ("%.32s") as %s ref while "strict refs" in useCan't use string ("%-32p") as %s ref while "strict refs" in useCan't use an undefined value as %s referenceModification of non-creatable array value attempted, subscript %dModification of non-creatable hash value attempted, subscript "%-p"Modification of a read-only value attemptedOut of memory! Insecure dependency in %s%sUnsupported socket function "%s" calledUnsupported directory function "%s" calledThe %s function is unimplemented"%s" variable %s can't be in a packageCan't localize through a referencepanic: memory wrap`!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_  !"#$%&'()*+,-./0123456789:;<=>?  !"#$%&'()*+,-./0123456789:;<=>?@  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~T(3>IU`kvͮü¢кƳ֦̠󬡾˽ūğ  !"#$%&')*+,-./012456789:;<=?@ABCDEFGHJKLMNOPQRSVWXYZ[\]^_abcdefghijlmnopqrstuwxyz{|}~ MULTIPLICITY PERL_IMPLICIT_CONTEXT USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API6 D D @$D@@@@ DD@ 6B"6(6( ""&@  T*T0D V6 W76666d"T"d"T"l"\#l"\#%.%%.%%>%% D.%%.%%%)%%6$$6$$6$$6$$6$$6$$>$$$$$$$$$$$$."#"")77 7677777777 ("(")")"((77)66666Hldh66H( ((" (HDHHh2ivviA HAHAH&"$@@IB6H]H6@@AHDDDDDD6@ @@R 6UB"("  .T""."". "( " ""," ""7I7III)))6)7 ))])]I7)))"6667("("("("(("("(""(("("6@"@6"6(6(6(((66666666 (10123456789abcdef0123456789ABCDEF\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}ZEROHUPQUITTRAPABRTBUSFPEKILLUSR1SEGVUSR2PIPESTKFLTCONTSTOPTSTPTTINTTOUURGXCPUXFSZVTALRMPROFWINCHPWRSYSNUM32NUM33RTMINNUM35NUM36NUM37NUM38NUM39NUM40NUM41NUM42NUM43NUM44NUM45NUM46NUM47NUM48NUM49NUM50NUM51NUM52NUM53NUM54NUM55NUM56NUM57NUM58NUM59NUM60NUM61NUM62NUM63RTMAXIOTPOLLUNUSEDstubpushmarkwantarrayconstgvsvpadsvpadavpadhvpadanypushrerv2gvrv2svav2arylenrv2cvanoncodesrefgenblessrcatlineregcmayberegcresetsubstconttranssassignaassignschopschompi_preinci_predeci_postinci_postdecpowi_multiplyi_dividei_modulorepeati_addi_subtractconcatleft_shiftright_shifti_lti_gti_lei_gei_eqi_nei_ncmpsltsgtslesgesnescmpbit_andbit_xorbit_ori_negatenotcomplementsmartmatchsrandhexoctrindexcryptucfirstlcfirstuclcquotemetarv2avaelemfastaelemasliceeachvaluesexistsrv2hvhelemhslicejoinlsliceanonlistanonhashsplicepushpopunshiftreversegrepstartgrepwhilemapwhilerangeflipdorcond_exprandassigndorassignentersubleavesubleavesublvcallerwarndielineseqnextstatedbstateunstackenterleaveenteriterenterloopleaveloopredodumpsetstatemethod_namedentergivenleavegivenenterwhenleavewhenbreakcontinuepipe_opfilenobinmodeuntietieddbmopendbmclosesselectgetcenterwriteleavewriteprtfsysseeksysreadsyswritesendrecveoftellfcntlioctlflocksockpairlistenacceptshutdowngsockoptssockoptgetsocknamegetpeernameftrreadftrwriteftrexecftereadftewritefteexecftisftsizeftmtimeftatimeftctimeftrownedfteownedftzeroftsockftchrftblkftfileftdirftpipeftsuidftsgidftsvtxftlinkftttyfttextftbinarychownunlinkchmodutimesymlinkreadlinkopen_dirreaddirtelldirseekdirrewinddirclosedirwaitwaitpidkillgetppidgetpgrpgetprioritytmslocaltimegmtimealarmsleepshmgetshmctlshmreadshmwritemsggetmsgctlmsgrcvsemopsemgetsemctldofileenterevalleaveevalentertryleavetryghbynameghbyaddrghostentgnbynamegnbyaddrgnetentgpbynamegpbynumbergprotoentgsbynamegsbyportgserventshostentsnetentsprotoentsserventehostentenetenteprotoenteserventgpwnamgpwuidgpwentspwentepwentggrnamggrgidggrentsgrentegrentoncecustomnull operationconstant itemscalar variableglob valueglob elemprivate variableprivate arrayprivate hashprivate valuepush regexpref-to-glob castscalar dereferencearray lengthsubroutine dereferenceanonymous subroutinesubroutine prototypereference constructorsingle ref constructorreference-type operatorquoted execution (``, qx)append I/O operatorregexp internal guardregexp internal resetregexp compilationpattern match (m//)pattern quote (qr//)substitution (s///)substitution iteratortransliteration (tr///)scalar assignmentlist assignmentscalar chopscalar chompdefined operatorundef operatormatch positioninteger preincrement (++)integer predecrement (--)integer postincrement (++)integer postdecrement (--)exponentiation (**)integer multiplication (*)integer division (/)integer modulus (%)repeat (x)integer addition (+)integer subtraction (-)concatenation (.) or stringleft bitshift (<<)right bitshift (>>)numeric lt (<)integer lt (<)numeric gt (>)integer gt (>)numeric le (<=)integer le (<=)numeric ge (>=)integer ge (>=)numeric eq (==)integer eq (==)numeric ne (!=)integer ne (!=)numeric comparison (<=>)integer comparison (<=>)string ltstring gtstring lestring gestring eqstring nestring comparison (cmp)bitwise and (&)bitwise xor (^)bitwise or (|)integer negation (-)1's complement (~)smart matcharray dereferenceconstant array elementarray slicehash dereferencehash elementhash slicejoin or stringlist sliceanonymous list ([])anonymous hash ({})grep iteratormap iteratorflipfloprange (or flip)range (or flop)logical and (&&)logical or (||)logical xordefined or (//)conditional expressionlogical and assignment (&&=)logical or assignment (||=)defined or assignment (//=)method lookupsubroutine exitlvalue subroutine returnsymbol resetline sequencedebug next statementiteration finalizerblock entryblock exitforeach loop entryforeach loop iteratorloop exitset statement infomethod with known namegiven()leave given blockwhen()leave when blockselect system callwrite exitgetsockoptsetsockopt-R-W-X-r-w-x-s-M-A-O-o-z-S-b-f-d-u-g-k-l-t-T-Bopendirtimesdo "file"eval "string"eval "string" exiteval {block}eval {block} exitsethostentsetnetentsetprotoentsetserventendhostentendnetentendprotoentendserventsetpwentendpwentsetgrentendgrentunknown custom operator/bin/shpanic: vsnprintf buffer overflowDon't know how to get file namerefcnt_dec: fd %d >= refcnt_size %d panic: PerlIO layer array corruptRecursive call to Perl_load_module in PerlIO_find_layerInvalid separator character %c%c%c in PerlIO layer specification %sArgument list not closed for PerlIO layer "%.*s"Usage class->find(name[,load])Layer does not match this perlPerlIOBase_dup %s f=%p o=%p param=%p More than one argument to open(,':%s')openn(%s,'%s','%s',%d,%x,%o,%p,%d,%p) More fds - old=%d, need %d, new=%d PerlIO_binmode f=%p %s %c %x %s perlio.cPerlIO::Layer::findPerlIO::Layer::NoWarningsPerlIO::LayerPERLIO_DEBUG(none)%.40s:%ld refcnt_dec: fd %d: %d <= 0 refcnt_dec: fd %d refcnt=%d refcnt_dec: fd %d < 0 Cannot flush f=%p Layer %ld is %s define %s %p warning:%s %.*s => %p PerlIOCannot find %.*s Unknown PerlIO layer "%.*s"Pushing %s PERLIOPerlIO_pop f=%p %s :raw f=%p :%s (Null)PerlIO_push f=%p %s %s %p TMPDIRw+IrIwUnknown PerlIO layer "scalar"HashCodeZeroing %p, %d refcnt_inc: fd %d: %d <= 0 refcnt_inc: fd %d refcnt=%d refcnt_inc: fd %d < 0 r+Cleanup layers for %p Destruct %p Destruct popping %s Clone %p from %p fdupopen f=%p param=%p bytesunixstdioperliopendingcrlfmmap<>0 but trueInteger overflow in octal numberIllegal octal digit '%c' ignoredOctal number > 037777777777 non-portableInteger overflow in binary numberIllegal binary digit '%c' ignoredBinary number > 0b11111111111111111111111111111111 non-portableInteger overflow in hexadecimal numberIllegal hexadecimal digit '%c' ignoredHexadecimal number > 0xffffffff non-portableOAAPerl_magic_setglob is dead code?NOT IMPL LINE %dpanic: mapstart:rawCan't fix broken locale name "%s"perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). perl: warning: Failed to fall back to the standard locale ("C"). POSIXabstrxfrm() gets absurdLANGUAGELC_ALLPERL_BADLANGunset LANGUAGE = %c%s%c, LC_ALL = %c%s%c, LC_LC_ALL= %.*s = "%s", LANG = %c%s%c UTF-8PERL_UNICODENo group ending character '%c' found in templateCharacter(s) in '%c' format wrapped in %sMalformed UTF-8 string in '%c' format in unpackCharacter in '%c' format wrapped in unpack()-group starts with a count in %sToo deeply nested ()-groups in %s'%c' allowed only after types %s in %sCan't use both '<' and '>' after type '%c' in %sCan't use '%c' in a group with different byte-order in %sDuplicate modifier '%c' after '%c' in %spack/unpack repeat count overflow'/' does not take a repeat count in %sWithin []-length '*' not allowed in %sWithin []-length '%c' not allowed in %sAssertion: marks beyond string end'@' outside of string in unpack'@' outside of string with malformed UTF-8 in unpackMalformed UTF-8 string in unpack'X' outside of string in unpack'x' outside of string in unpack'/' must follow a numeric type in unpackUnterminated compressed integer in unpack'P' must have an explicit size in unpackCount after length/code in unpacklength/code after end of string in unpackCode missing after '/' in unpackCode missing after '/' in packMalformed UTF-8 string in pack'%c' outside of string in packPerl bug: predicted utf8 length not availableCharacter in 'c' format wrapped in packCharacter in 'C' format wrapped in packCharacter in 'W' format wrapped in packCannot compress negative numbers in packCannot compress integer in packAttempt to pack pointer to temporary valueField too wide in 'u' format in packAssertion: string is shorter than advertisedCan only compress unsigned integers in packInvalid type ',' in %ssSiIlLqQjJfFdDpP(sSiIlLxXnNvV@.Malformed integer in [] in %sInvalid type '%c' in %s'X' outside of string in %sInvalid type '%c' in unpackU0 mode on a byte string%.*lu0000000000fFdDcCsSiIlLnNUWvVqQjJNegative '/' count in unpack@XxuaAZInvalid type '%c' in pack'%%' may not be used in packƖƖuƖƖƖƖƖ>ƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖQ(`.ƖƖsƖ"ƖͧƖͧƖvƖƖcƖ/ͧdƖ(ƖƖƖƖƖƖ(`vƖƖ"ƖƖcƖǟƖƖƖcHƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖ>ƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖQƖƖƖƖƖƖƖƖƖƖͧƖSƖƖƖƖcƖƖSƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖƖڮƖƖƖƖƖƖڮƖ>5xx+xxxxxxxxxxxxxxxxxxxxxxxxx~xxqxxxx{^xxxxxxxxnx xXxxxx0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqxxxxxx{xMxxxxxxxxxxxxxxxxxxXxxxxx0xxx8""""""""""AAG?Sort subroutine didn't return single valueSort subroutine didn't return a numeric valueUndefined sort subroutine "%-p" calledUndefined subroutine in sortXS_VERSION%s::%s1.10bootstrap parameterDynaLoader.cDynaLoader::dl_load_fileDynaLoader::dl_unload_fileDynaLoader::dl_find_symbolDynaLoader::dl_undef_symbolsDynaLoader::dl_install_xsubDynaLoader::dl_errorDynaLoader::CLONEPERL_DL_NONLAZYDynaLoaderlibhandle, symbolnamelibreffilename, flags=0%s object version %-p does not match %s%s%s%s %-pperl_name, symref, filename="$Package";,zR| lrAB KpT)3H3333@4445T555<666 7T7778@8t888@9|999Z$y@~@@@@@@((p(@@@@@@@@@@@@@@@@@@)@@@@@@@@@AAA AAAAA"A&A)A-A0A((4A7A>ACAHAMARAXA[A_AbAfA4*%Tk% aa%$a%+a1a%SE%=aCaWs{ǢƢϢ֢΢բݢt #*18=EţCKS[̣bjryģˣӣڣqx  (1;BL[cp{ɤ֤&2CLZcq{Хܥ -7FTgr˦ئI>)3:JDO_myz&#%.:<@ABD EHI&L-N7PASIUPaXcid{efghiklnopqr stu$v1V8wCxKyU~`z&yTc  eFQ  CC &&&&>>>>>>>>>>>>>4?&?n ?????$?(?-?2?9?>?TD?H?L?R?X?^?d?j?p?v?|??????????????????????@@ @@s@@0&"@>'@0@:@@@h@E@K@Q@W@^@e@k@q@{@@tH@@Kp@=<_@@@kL\>@@@@I@I@UZ_@@@@@@A@AA AAA"A A)A2A0A8A6AAA}(HASA@L_AJLdATLiA^LnAhLsArLxAA}AAAAACAAAAAAAAAA8ADA?AAAIANASA@AA@PAA~D $ EAAABBBBB"B(B/B4Bk;BBBHBNB`'aUB\^ZBaBjBsBzBBMAB+oBBBWBBBMAAMBBBBB'BBBBCC I CCC$C,C2C̞8C`BCLC!  GVC[CKP`CiCvCCCCCCdLCCzCCCCCCCCCCCD[( DDD#D(D-D1D D'6D'@0@GGGGGGGGH HH0H=HTHiH~HHH@H<HHHI&I9IMIbIvIIIIIIIIII_IJJ0J(JJJBJeJ]JxJJJJJJJJJJJJKf$K7KKKZKiKxKKKKKKKKKL L9LCLMLWLaLkLuLLLLLLALL8ADA?AAAIANASA@AA@PAA~D $ EAAABBBLM MM/B4Bk;B%M6MCM`'aNM\^]MhM|MsBzBBMAB+oB)MUMMMMMMMNN(NENaN}N4NNBCCNNNNNNOO"OO8O!  GVC[CKPBOUOlOtOOOCCdLCzCCCCCCOCCDO[( DDD#D(D-D1D D'6D>">2>B>R>b>r>>>>>>>>>??"?2?B?R?b?r?????????@@"@2@B@R@b@r@@@@@@@@@AA"A2ABARAbArAAAAAAAAABB"B2BBBRBbBrBBBBBBBBBCC"C2CBCRCbCrCCCCCCCCCDD"D2DBDRDbDrDDDDDDDDDEE"E2EBEREbErEEEEEEEEEFF"F2FBFRFbFrFFFFFFFFFGG"G2GBGRGbGrGGGGGGGGGHH"H2HBHRHbHrHHHHHHHHHII"I2IBIRIbIrIIIIIIIIIJJ"J2JBJRJbJrJJJJJJJJJKK"K2KBKRKbKrKKKKKKKKKLL"L2LBLRLbLrLLLLLLLLLMM"M2MBMRMbMrMMMMMMMMMNN"N2NBNRNbNrNNNNNNNNNOO"O2OBORObOrOOOOOOOOOPP"P2PBPRPbPrPPPPPPPPPQQ"Q2QBQRQbQrQQQQQQQQQRR"R2RBRRRbRrRRRRRRRRRSS"S2SBSRSbSrSSSSSSSSSTT"T2TBTRTbTrTTTTTTTTTUU"U2UBURUbUrUUUUUUUUUVV"V2VBVRVbVrVVVVVVVVVWW"W2WBWRWbWrWWWWWWWWWXX"X2XBXRXbXrXXXXXXXXXYY"Y2YBYRYbYrYYYYYYYYYZZ"Z2ZBZRZbZrZZZZZZZZZ[["[2[B[R[b[r[[[[[[[[[\\"\2\B\R\b\r\\\\\\\\\]]"]2]B]R]b]r]]]]]]]]]^^"^2^B^R^b^r^^^^^^^^^__"_2_  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ QpBpc'pUpWpUpUpU(pU(pU,pU4libperl.so.5.10.1 #.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.data.rel.ro.dynamic.got.got.plt.data.bss.gnu_debuglink $"88TCoDD7( ||0k8ohhEo@T DDXR]  ! f0aPBl@_@_ثr  x@ @ e pppp<Ăr̂r ؂rr ܛ܋̜̌ `T Tl13%s: creation of %s failed - aborting with errno %i. %s: creation of private temporary subdirectory %s failed - aborting with errno %i. /9z  \oLd  _@؞o0ooڜ_^n~Πޠ.>N^n~Ρޡ.>N^n~΢0uA!0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0uH"GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment 44HH !hh$84oLL> dd FNoڜV[o00j s ؞@ | 0wHH "|-\\PPx H^^^___`a|@ 0|#RFILEac9f463a/Config.pm #line 1 "/usr/lib/perl/5.10/Config.pm" # This file was created by configpm when Perl was built. Any changes # made to this file will be lost the next time perl is built. # for a description of the variables, please have a look at the # Glossary file, as written in the Porting folder, or use the url: # http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/Glossary package Config; use strict; # use warnings; Pulls in Carp # use vars pulls in Carp @Config::EXPORT = qw(%Config); @Config::EXPORT_OK = qw(myconfig config_sh config_vars config_re); # Need to stub all the functions to make code such as print Config::config_sh # keep working sub myconfig; sub config_sh; sub config_vars; sub config_re; my %Export_Cache = map {($_ => 1)} (@Config::EXPORT, @Config::EXPORT_OK); our %Config; # Define our own import method to avoid pulling in the full Exporter: sub import { my $pkg = shift; @_ = @Config::EXPORT unless @_; my @funcs = grep $_ ne '%Config', @_; my $export_Config = @funcs < @_ ? 1 : 0; no strict 'refs'; my $callpkg = caller(0); foreach my $func (@funcs) { die sprintf qq{"%s" is not exported by the %s module\n}, $func, __PACKAGE__ unless $Export_Cache{$func}; *{$callpkg.'::'.$func} = \&{$func}; } *{"$callpkg\::Config"} = \%Config if $export_Config; return; } die "Perl lib version (5.10.1) doesn't match executable version ($])" unless $^V; $^V eq 5.10.1 or die "Perl lib version (5.10.1) doesn't match executable version (" . sprintf("v%vd",$^V) . ")"; sub FETCH { my($self, $key) = @_; # check for cached value (which may be undef so we use exists not defined) return $self->{$key} if exists $self->{$key}; return $self->fetch_string($key); } sub TIEHASH { bless $_[1], $_[0]; } sub DESTROY { } sub AUTOLOAD { require 'Config_heavy.pl'; goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/; die "&Config::AUTOLOAD failed on $Config::AUTOLOAD"; } # tie returns the object, so the value returned to require will be true. tie %Config, 'Config', { archlibexp => '/usr/lib/perl/5.10', archname => 'i486-linux-gnu-thread-multi', cc => 'cc', d_readlink => 'define', d_symlink => 'define', dlsrc => 'dl_dlopen.xs', dont_use_nlink => undef, exe_ext => '', inc_version_list => '5.10.0', intsize => '4', ldlibpthname => 'LD_LIBRARY_PATH', libpth => '/usr/local/lib /lib /usr/lib /usr/lib64', osname => 'linux', osvers => '2.6.24-27-server', path_sep => ':', privlibexp => '/usr/share/perl/5.10', scriptdir => '/usr/bin', sitearchexp => '/usr/local/lib/perl/5.10.1', sitelibexp => '/usr/local/share/perl/5.10.1', useithreads => 'define', usevendorprefix => 'define', version => '5.10.1', }; FILEc33fbebe/Config_git.pl###################################################################### # WARNING: 'lib/Config_git.pl' is generated by make_patchnum.pl # DO NOT EDIT DIRECTLY - edit make_patchnum.pl instead ###################################################################### $Config::Git_Data=<<'ENDOFGIT'; git_commit_id='' git_describe='' git_branch='' git_uncommitted_changes='' git_commit_id_title='' ENDOFGIT FILEcbfebe4f/Config_heavy.pl# This file was created by configpm when Perl was built. Any changes # made to this file will be lost the next time perl is built. package Config; use strict; # use warnings; Pulls in Carp # use vars pulls in Carp ## ## This file was produced by running the Configure script. It holds all the ## definitions figured out by Configure. Should you modify one of these values, ## do not forget to propagate your changes by running "Configure -der". You may ## instead choose to run each of the .SH files by yourself, or "Configure -S". ## # ## Package name : perl5 ## Source directory : . ## Configuration time: Fri Apr 23 07:59:14 UTC 2010 ## Configured by : Debian Project ## Target system : linux vernadsky 2.6.24-27-server #1 smp fri mar 12 01:45:06 utc 2010 i686 gnulinux # #: Configure command line arguments. # #: Variables propagated from previous config.sh file. our $summary = <<'!END!'; Summary of my $package (revision $revision $version_patchlevel_string) configuration: $git_commit_id_title $git_commit_id$git_ancestor_line Platform: osname=$osname, osvers=$osvers, archname=$archname uname='$myuname' config_args='$config_args' hint=$hint, useposix=$useposix, d_sigaction=$d_sigaction useithreads=$useithreads, usemultiplicity=$usemultiplicity useperlio=$useperlio, d_sfio=$d_sfio, uselargefiles=$uselargefiles, usesocks=$usesocks use64bitint=$use64bitint, use64bitall=$use64bitall, uselongdouble=$uselongdouble usemymalloc=$usemymalloc, bincompat5005=undef Compiler: cc='$cc', ccflags ='$ccflags', optimize='$optimize', cppflags='$cppflags' ccversion='$ccversion', gccversion='$gccversion', gccosandvers='$gccosandvers' intsize=$intsize, longsize=$longsize, ptrsize=$ptrsize, doublesize=$doublesize, byteorder=$byteorder d_longlong=$d_longlong, longlongsize=$longlongsize, d_longdbl=$d_longdbl, longdblsize=$longdblsize ivtype='$ivtype', ivsize=$ivsize, nvtype='$nvtype', nvsize=$nvsize, Off_t='$lseektype', lseeksize=$lseeksize alignbytes=$alignbytes, prototype=$prototype Linker and Libraries: ld='$ld', ldflags ='$ldflags' libpth=$libpth libs=$libs perllibs=$perllibs libc=$libc, so=$so, useshrplib=$useshrplib, libperl=$libperl gnulibc_version='$gnulibc_version' Dynamic Linking: dlsrc=$dlsrc, dlext=$dlext, d_dlsymun=$d_dlsymun, ccdlflags='$ccdlflags' cccdlflags='$cccdlflags', lddlflags='$lddlflags' !END! my $summary_expanded; sub myconfig { return $summary_expanded if $summary_expanded; ($summary_expanded = $summary) =~ s{\$(\w+)} { my $c; if ($1 eq 'git_ancestor_line') { if ($Config::Config{git_ancestor}) { $c= "\n Ancestor: $Config::Config{git_ancestor}"; } else { $c= ""; } } else { $c = $Config::Config{$1}; } defined($c) ? $c : 'undef' }ge; $summary_expanded; } local *_ = \my $a; $_ = <<'!END!'; Author='' CONFIG='true' Date='$Date' Header='' Id='$Id' Locker='' Log='$Log' PATCHLEVEL='10' PERL_API_REVISION='5' PERL_API_SUBVERSION='0' PERL_API_VERSION='10' PERL_CONFIG_SH='true' PERL_PATCHLEVEL='' PERL_REVISION='5' PERL_SUBVERSION='1' PERL_VERSION='10' RCSfile='$RCSfile' Revision='$Revision' SUBVERSION='1' Source='' State='' _a='.a' _exe='' _o='.o' afs='false' afsroot='/afs' alignbytes='4' ansi2knr='' aphostname='/bin/hostname' api_revision='5' api_subversion='0' api_version='10' api_versionstring='5.10.0' ar='ar' archlib='/usr/lib/perl/5.10' archlibexp='/usr/lib/perl/5.10' archname64='' archname='i486-linux-gnu-thread-multi' archobjs='' asctime_r_proto='REENTRANT_PROTO_B_SB' awk='awk' baserev='5.0' bash='' bin='/usr/bin' binexp='/usr/bin' bison='bison' byacc='byacc' byteorder='1234' c='' castflags='0' cat='cat' cc='cc' cccdlflags='-fPIC' ccdlflags='-Wl,-E' ccflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccname='gcc' ccsymbols='' ccversion='' cf_by='Debian Project' cf_email='perl@packages.debian.org' cf_time='Fri Apr 23 07:59:14 UTC 2010' chgrp='' chmod='chmod' chown='' clocktype='clock_t' comm='comm' compress='' config_arg0='Configure' config_arg10='-Dvendorlib=/usr/share/perl5' config_arg11='-Dvendorarch=/usr/lib/perl5' config_arg12='-Dsiteprefix=/usr/local' config_arg13='-Dsitelib=/usr/local/share/perl/5.10.1' config_arg14='-Dsitearch=/usr/local/lib/perl/5.10.1' config_arg15='-Dman1dir=/usr/share/man/man1' config_arg16='-Dman3dir=/usr/share/man/man3' config_arg17='-Dsiteman1dir=/usr/local/man/man1' config_arg18='-Dsiteman3dir=/usr/local/man/man3' config_arg19='-Dman1ext=1' config_arg1='-Dusethreads' config_arg20='-Dman3ext=3perl' config_arg21='-Dpager=/usr/bin/sensible-pager' config_arg22='-Uafs' config_arg23='-Ud_csh' config_arg24='-Ud_ualarm' config_arg25='-Uusesfio' config_arg26='-Uusenm' config_arg27='-DDEBUGGING=-g' config_arg28='-Doptimize=-O2' config_arg29='-Duseshrplib' config_arg2='-Duselargefiles' config_arg30='-Dlibperl=libperl.so.5.10.1' config_arg31='-Dd_dosuid' config_arg32='-des' config_arg3='-Dccflags=-DDEBIAN' config_arg4='-Dcccdlflags=-fPIC' config_arg5='-Darchname=i486-linux-gnu' config_arg6='-Dprefix=/usr' config_arg7='-Dprivlib=/usr/share/perl/5.10' config_arg8='-Darchlib=/usr/lib/perl/5.10' config_arg9='-Dvendorprefix=/usr' config_argc='32' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.10.1 -Dsitearch=/usr/local/lib/perl/5.10.1 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.1 -Dd_dosuid -des' contains='grep' cp='cp' cpio='' cpp='cpp' cpp_stuff='42' cppccsymbols='_FORTIFY_SOURCE=2' cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include' cpplast='-' cppminus='-' cpprun='cc -E' cppstdin='cc -E' cppsymbols='_FILE_OFFSET_BITS=64 _GNU_SOURCE=1 _LARGEFILE64_SOURCE=1 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=200809L _POSIX_SOURCE=1 _REENTRANT=1 _XOPEN_SOURCE=700 _XOPEN_SOURCE_EXTENDED=1 __BIGGEST_ALIGNMENT__=16 __CHAR16_TYPE__=short\ unsigned\ int __CHAR32_TYPE__=unsigned\ int __CHAR_BIT__=8 __DBL_DENORM_MIN__=4.9406564584124654e-324 __DBL_DIG__=15 __DBL_EPSILON__=2.2204460492503131e-16 __DBL_HAS_DENORM__=1 __DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_MANT_DIG__=53 __DBL_MAX_10_EXP__=308 __DBL_MAX_EXP__=1024 __DBL_MAX__=1.7976931348623157e+308 __DBL_MIN_10_EXP__=(-307) __DBL_MIN_EXP__=(-1021) __DBL_MIN__=2.2250738585072014e-308 __DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX_EXP__=6145 __DEC128_MAX__=9.999999999999999999999999999999999E6144DL __DEC128_MIN_EXP__=(-6142) __DEC128_MIN__=1E-6143DL __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL __DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX_EXP__=97 __DEC32_MAX__=9.999999E96DF __DEC32_MIN_EXP__=(-94) __DEC32_MIN__=1E-95DF __DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD __DEC64_MANT_DIG__=16 __DEC64_MAX_EXP__=385 __DEC64_MAX__=9.999999999999999E384DD __DEC64_MIN_EXP__=(-382) __DEC64_MIN__=1E-383DD __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD __DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __DEC_EVAL_METHOD__=2 __ELF__=1 __FINITE_MATH_ONLY__=0 __FLT_DENORM_MIN__=1.40129846e-45F __FLT_DIG__=6 __FLT_EPSILON__=1.19209290e-7F __FLT_EVAL_METHOD__=2 __FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1 __FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX_EXP__=128 __FLT_MAX__=3.40282347e+38F __FLT_MIN_10_EXP__=(-37) __FLT_MIN_EXP__=(-125) __FLT_MIN__=1.17549435e-38F __FLT_RADIX__=2 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GLIBC_MINOR__=11 __GLIBC__=2 __GNUC_GNU_INLINE__=1 __GNUC_MINOR__=4 __GNUC_PATCHLEVEL__=3 __GNUC__=4 __GNU_LIBRARY__=6 __GXX_ABI_VERSION=1002 __INTMAX_MAX__=9223372036854775807LL __INTMAX_TYPE__=long\ long\ int __INT_MAX__=2147483647 __LDBL_DENORM_MIN__=3.64519953188247460253e-4951L __LDBL_DIG__=18 __LDBL_EPSILON__=1.08420217248550443401e-19L __LDBL_HAS_DENORM__=1 __LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_MANT_DIG__=64 __LDBL_MAX_10_EXP__=4932 __LDBL_MAX_EXP__=16384 __LDBL_MAX__=1.18973149535723176502e+4932L __LDBL_MIN_10_EXP__=(-4931) __LDBL_MIN_EXP__=(-16381) __LDBL_MIN__=3.36210314311209350626e-4932L __LONG_LONG_MAX__=9223372036854775807LL __LONG_MAX__=2147483647L __PTRDIFF_TYPE__=int __REGISTER_PREFIX__= __SCHAR_MAX__=127 __SHRT_MAX__=32767 __SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT__=4 __SIZEOF_INT__=4 __SIZEOF_LONG_DOUBLE__=12 __SIZEOF_LONG_LONG__=8 __SIZEOF_LONG__=4 __SIZEOF_POINTER__=4 __SIZEOF_PTRDIFF_T__=4 __SIZEOF_SHORT__=2 __SIZEOF_SIZE_T__=4 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4 __SIZE_TYPE__=unsigned\ int __SSP__=1 __STDC_HOSTED__=1 __STDC__=1 __UINTMAX_TYPE__=long\ long\ unsigned\ int __USER_LABEL_PREFIX__= __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_GNU=1 __USE_LARGEFILE64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_POSIX=1 __USE_REENTRANT=1 __USE_SVID=1 __USE_UNIX98=1 __USE_XOPEN=1 __USE_XOPEN_EXTENDED=1 __VERSION__="4.4.3" __WCHAR_MAX__=2147483647 __WCHAR_TYPE__=int __WINT_TYPE__=unsigned\ int __gnu_linux__=1 __i386=1 __i386__=1 __i486=1 __i486__=1 __linux=1 __linux__=1 __unix=1 __unix__=1 i386=1 linux=1 unix=1' crypt_r_proto='REENTRANT_PROTO_B_CCS' cryptlib='' csh='csh' ctermid_r_proto='0' ctime_r_proto='REENTRANT_PROTO_B_SB' d_Gconvert='gcvt((x),(n),(b))' d_PRIEUldbl='define' d_PRIFUldbl='define' d_PRIGUldbl='define' d_PRIXU64='define' d_PRId64='define' d_PRIeldbl='define' d_PRIfldbl='define' d_PRIgldbl='define' d_PRIi64='define' d_PRIo64='define' d_PRIu64='define' d_PRIx64='define' d_SCNfldbl='define' d__fwalk='undef' d_access='define' d_accessx='undef' d_aintl='undef' d_alarm='define' d_archlib='define' d_asctime64='undef' d_asctime_r='define' d_atolf='undef' d_atoll='define' d_attribute_deprecated='define' d_attribute_format='define' d_attribute_malloc='define' d_attribute_nonnull='define' d_attribute_noreturn='define' d_attribute_pure='define' d_attribute_unused='define' d_attribute_warn_unused_result='define' d_bcmp='define' d_bcopy='define' d_bsd='undef' d_bsdgetpgrp='undef' d_bsdsetpgrp='undef' d_builtin_choose_expr='define' d_builtin_expect='define' d_bzero='define' d_c99_variadic_macros='define' d_casti32='undef' d_castneg='define' d_charvspr='undef' d_chown='define' d_chroot='define' d_chsize='undef' d_class='undef' d_clearenv='define' d_closedir='define' d_cmsghdr_s='define' d_const='define' d_copysignl='define' d_cplusplus='undef' d_crypt='define' d_crypt_r='define' d_csh='undef' d_ctermid='define' d_ctermid_r='undef' d_ctime64='undef' d_ctime_r='define' d_cuserid='define' d_dbl_dig='define' d_dbminitproto='define' d_difftime64='undef' d_difftime='define' d_dir_dd_fd='undef' d_dirfd='define' d_dirnamlen='undef' d_dlerror='define' d_dlopen='define' d_dlsymun='undef' d_dosuid='define' d_drand48_r='define' d_drand48proto='define' d_dup2='define' d_eaccess='define' d_endgrent='define' d_endgrent_r='undef' d_endhent='define' d_endhostent_r='undef' d_endnent='define' d_endnetent_r='undef' d_endpent='define' d_endprotoent_r='undef' d_endpwent='define' d_endpwent_r='undef' d_endsent='define' d_endservent_r='undef' d_eofnblk='define' d_eunice='undef' d_faststdio='define' d_fchdir='define' d_fchmod='define' d_fchown='define' d_fcntl='define' d_fcntl_can_lock='define' d_fd_macros='define' d_fd_set='define' d_fds_bits='define' d_fgetpos='define' d_finite='define' d_finitel='define' d_flexfnam='define' d_flock='define' d_flockproto='define' d_fork='define' d_fp_class='undef' d_fpathconf='define' d_fpclass='undef' d_fpclassify='undef' d_fpclassl='undef' d_fpos64_t='undef' d_frexpl='define' d_fs_data_s='undef' d_fseeko='define' d_fsetpos='define' d_fstatfs='define' d_fstatvfs='define' d_fsync='define' d_ftello='define' d_ftime='undef' d_futimes='define' d_gdbm_ndbm_h_uses_prototypes='undef' d_gdbmndbm_h_uses_prototypes='undef' d_getaddrinfo='define' d_getcwd='define' d_getespwnam='undef' d_getfsstat='undef' d_getgrent='define' d_getgrent_r='define' d_getgrgid_r='define' d_getgrnam_r='define' d_getgrps='define' d_gethbyaddr='define' d_gethbyname='define' d_gethent='define' d_gethname='define' d_gethostbyaddr_r='define' d_gethostbyname_r='define' d_gethostent_r='define' d_gethostprotos='define' d_getitimer='define' d_getlogin='define' d_getlogin_r='define' d_getmnt='undef' d_getmntent='define' d_getnameinfo='define' d_getnbyaddr='define' d_getnbyname='define' d_getnent='define' d_getnetbyaddr_r='define' d_getnetbyname_r='define' d_getnetent_r='define' d_getnetprotos='define' d_getpagsz='define' d_getpbyname='define' d_getpbynumber='define' d_getpent='define' d_getpgid='define' d_getpgrp2='undef' d_getpgrp='define' d_getppid='define' d_getprior='define' d_getprotobyname_r='define' d_getprotobynumber_r='define' d_getprotoent_r='define' d_getprotoprotos='define' d_getprpwnam='undef' d_getpwent='define' d_getpwent_r='define' d_getpwnam_r='define' d_getpwuid_r='define' d_getsbyname='define' d_getsbyport='define' d_getsent='define' d_getservbyname_r='define' d_getservbyport_r='define' d_getservent_r='define' d_getservprotos='define' d_getspnam='define' d_getspnam_r='define' d_gettimeod='define' d_gmtime64='undef' d_gmtime_r='define' d_gnulibc='define' d_grpasswd='define' d_hasmntopt='define' d_htonl='define' d_ilogbl='define' d_inc_version_list='undef' d_index='undef' d_inetaton='define' d_inetntop='define' d_inetpton='define' d_int64_t='define' d_isascii='define' d_isfinite='undef' d_isinf='define' d_isnan='define' d_isnanl='define' d_killpg='define' d_lchown='define' d_ldbl_dig='define' d_libm_lib_version='define' d_link='define' d_localtime64='undef' d_localtime_r='define' d_localtime_r_needs_tzset='define' d_locconv='define' d_lockf='define' d_longdbl='define' d_longlong='define' d_lseekproto='define' d_lstat='define' d_madvise='define' d_malloc_good_size='undef' d_malloc_size='undef' d_mblen='define' d_mbstowcs='define' d_mbtowc='define' d_memchr='define' d_memcmp='define' d_memcpy='define' d_memmove='define' d_memset='define' d_mkdir='define' d_mkdtemp='define' d_mkfifo='define' d_mkstemp='define' d_mkstemps='define' d_mktime64='undef' d_mktime='define' d_mmap='define' d_modfl='define' d_modfl_pow32_bug='undef' d_modflproto='define' d_mprotect='define' d_msg='define' d_msg_ctrunc='define' d_msg_dontroute='define' d_msg_oob='define' d_msg_peek='define' d_msg_proxy='define' d_msgctl='define' d_msgget='define' d_msghdr_s='define' d_msgrcv='define' d_msgsnd='define' d_msync='define' d_munmap='define' d_mymalloc='undef' d_ndbm='define' d_ndbm_h_uses_prototypes='undef' d_nice='define' d_nl_langinfo='define' d_nv_preserves_uv='define' d_nv_zero_is_allbits_zero='define' d_off64_t='define' d_old_pthread_create_joinable='undef' d_oldpthreads='undef' d_oldsock='undef' d_open3='define' d_pathconf='define' d_pause='define' d_perl_otherlibdirs='undef' d_phostname='undef' d_pipe='define' d_poll='define' d_portable='define' d_printf_format_null='define' d_procselfexe='define' d_pseudofork='undef' d_pthread_atfork='define' d_pthread_attr_setscope='define' d_pthread_yield='define' d_pwage='undef' d_pwchange='undef' d_pwclass='undef' d_pwcomment='undef' d_pwexpire='undef' d_pwgecos='define' d_pwpasswd='define' d_pwquota='undef' d_qgcvt='define' d_quad='define' d_random_r='define' d_readdir64_r='define' d_readdir='define' d_readdir_r='define' d_readlink='define' d_readv='define' d_recvmsg='define' d_rename='define' d_rewinddir='define' d_rmdir='define' d_safebcpy='undef' d_safemcpy='undef' d_sanemcmp='define' d_sbrkproto='define' d_scalbnl='define' d_sched_yield='define' d_scm_rights='define' d_seekdir='define' d_select='define' d_sem='define' d_semctl='define' d_semctl_semid_ds='define' d_semctl_semun='define' d_semget='define' d_semop='define' d_sendmsg='define' d_setegid='define' d_seteuid='define' d_setgrent='define' d_setgrent_r='undef' d_setgrps='define' d_sethent='define' d_sethostent_r='undef' d_setitimer='define' d_setlinebuf='define' d_setlocale='define' d_setlocale_r='undef' d_setnent='define' d_setnetent_r='undef' d_setpent='define' d_setpgid='define' d_setpgrp2='undef' d_setpgrp='define' d_setprior='define' d_setproctitle='undef' d_setprotoent_r='undef' d_setpwent='define' d_setpwent_r='undef' d_setregid='define' d_setresgid='define' d_setresuid='define' d_setreuid='define' d_setrgid='undef' d_setruid='undef' d_setsent='define' d_setservent_r='undef' d_setsid='define' d_setvbuf='define' d_sfio='undef' d_shm='define' d_shmat='define' d_shmatprototype='define' d_shmctl='define' d_shmdt='define' d_shmget='define' d_sigaction='define' d_signbit='define' d_sigprocmask='define' d_sigsetjmp='define' d_sitearch='define' d_snprintf='define' d_sockatmark='define' d_sockatmarkproto='define' d_socket='define' d_socklen_t='define' d_sockpair='define' d_socks5_init='undef' d_sprintf_returns_strlen='define' d_sqrtl='define' d_srand48_r='define' d_srandom_r='define' d_sresgproto='define' d_sresuproto='define' d_statblks='define' d_statfs_f_flags='undef' d_statfs_s='define' d_statvfs='define' d_stdio_cnt_lval='undef' d_stdio_ptr_lval='define' d_stdio_ptr_lval_nochange_cnt='undef' d_stdio_ptr_lval_sets_cnt='define' d_stdio_stream_array='undef' d_stdiobase='define' d_stdstdio='define' d_strchr='define' d_strcoll='define' d_strctcpy='define' d_strerrm='strerror(e)' d_strerror='define' d_strerror_r='define' d_strftime='define' d_strlcat='undef' d_strlcpy='undef' d_strtod='define' d_strtol='define' d_strtold='define' d_strtoll='define' d_strtoq='define' d_strtoul='define' d_strtoull='define' d_strtouq='define' d_strxfrm='define' d_suidsafe='undef' d_symlink='define' d_syscall='define' d_syscallproto='define' d_sysconf='define' d_sysernlst='' d_syserrlst='define' d_system='define' d_tcgetpgrp='define' d_tcsetpgrp='define' d_telldir='define' d_telldirproto='define' d_time='define' d_timegm='define' d_times='define' d_tm_tm_gmtoff='define' d_tm_tm_zone='define' d_tmpnam_r='define' d_truncate='define' d_ttyname_r='define' d_tzname='define' d_u32align='undef' d_ualarm='undef' d_umask='define' d_uname='define' d_union_semun='undef' d_unordered='undef' d_unsetenv='define' d_usleep='define' d_usleepproto='define' d_ustat='define' d_vendorarch='define' d_vendorbin='define' d_vendorlib='define' d_vendorscript='define' d_vfork='undef' d_void_closedir='undef' d_voidsig='define' d_voidtty='' d_volatile='define' d_vprintf='define' d_vsnprintf='define' d_wait4='define' d_waitpid='define' d_wcstombs='define' d_wctomb='define' d_writev='define' d_xenix='undef' date='date' db_hashtype='u_int32_t' db_prefixtype='size_t' db_version_major='4' db_version_minor='8' db_version_patch='24' defvoidused='15' direntrytype='struct dirent' dlext='so' dlsrc='dl_dlopen.xs' doublesize='8' drand01='drand48()' drand48_r_proto='REENTRANT_PROTO_I_ST' dtrace='' dynamic_ext='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IO/Compress IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize XS/APItest XS/Typemap attrs mro re threads threads/shared' eagain='EAGAIN' ebcdic='undef' echo='echo' egrep='egrep' emacs='' endgrent_r_proto='0' endhostent_r_proto='0' endnetent_r_proto='0' endprotoent_r_proto='0' endpwent_r_proto='0' endservent_r_proto='0' eunicefix=':' exe_ext='' expr='expr' extensions='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IO/Compress IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize XS/APItest XS/Typemap attrs mro re threads threads/shared Attribute/Handlers Errno Module/Pluggable Safe Test/Harness' extern_C='extern' extras='' fflushNULL='define' fflushall='undef' find='' firstmakefile='makefile' flex='' fpossize='16' fpostype='fpos_t' freetype='void' from=':' full_ar='/usr/bin/ar' full_csh='csh' full_sed='/bin/sed' gccansipedantic='' gccosandvers='' gccversion='4.4.3' getgrent_r_proto='REENTRANT_PROTO_I_SBWR' getgrgid_r_proto='REENTRANT_PROTO_I_TSBWR' getgrnam_r_proto='REENTRANT_PROTO_I_CSBWR' gethostbyaddr_r_proto='REENTRANT_PROTO_I_TsISBWRE' gethostbyname_r_proto='REENTRANT_PROTO_I_CSBWRE' gethostent_r_proto='REENTRANT_PROTO_I_SBWRE' getlogin_r_proto='REENTRANT_PROTO_I_BW' getnetbyaddr_r_proto='REENTRANT_PROTO_I_uISBWRE' getnetbyname_r_proto='REENTRANT_PROTO_I_CSBWRE' getnetent_r_proto='REENTRANT_PROTO_I_SBWRE' getprotobyname_r_proto='REENTRANT_PROTO_I_CSBWR' getprotobynumber_r_proto='REENTRANT_PROTO_I_ISBWR' getprotoent_r_proto='REENTRANT_PROTO_I_SBWR' getpwent_r_proto='REENTRANT_PROTO_I_SBWR' getpwnam_r_proto='REENTRANT_PROTO_I_CSBWR' getpwuid_r_proto='REENTRANT_PROTO_I_TSBWR' getservbyname_r_proto='REENTRANT_PROTO_I_CCSBWR' getservbyport_r_proto='REENTRANT_PROTO_I_ICSBWR' getservent_r_proto='REENTRANT_PROTO_I_SBWR' getspnam_r_proto='REENTRANT_PROTO_I_CSBWR' gidformat='"lu"' gidsign='1' gidsize='4' gidtype='gid_t' glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib /lib64 /usr/lib64 /usr/local/lib64 ' gmake='gmake' gmtime_r_proto='REENTRANT_PROTO_S_TS' gnulibc_version='2.11.1' grep='grep' groupcat='cat /etc/group' groupstype='gid_t' gzip='gzip' h_fcntl='false' h_sysfile='true' hint='recommended' hostcat='cat /etc/hosts' html1dir=' ' html1direxp='' html3dir=' ' html3direxp='' i16size='2' i16type='short' i32size='4' i32type='long' i64size='8' i64type='long long' i8size='1' i8type='signed char' i_arpainet='define' i_assert='define' i_bsdioctl='' i_crypt='define' i_db='define' i_dbm='define' i_dirent='define' i_dld='undef' i_dlfcn='define' i_fcntl='undef' i_float='define' i_fp='undef' i_fp_class='undef' i_gdbm='define' i_gdbm_ndbm='define' i_gdbmndbm='undef' i_grp='define' i_ieeefp='undef' i_inttypes='define' i_langinfo='define' i_libutil='undef' i_limits='define' i_locale='define' i_machcthr='undef' i_malloc='define' i_mallocmalloc='undef' i_math='define' i_memory='undef' i_mntent='define' i_ndbm='undef' i_netdb='define' i_neterrno='undef' i_netinettcp='define' i_niin='define' i_poll='define' i_prot='undef' i_pthread='define' i_pwd='define' i_rpcsvcdbm='undef' i_sfio='undef' i_sgtty='undef' i_shadow='define' i_socks='undef' i_stdarg='define' i_stddef='define' i_stdlib='define' i_string='define' i_sunmath='undef' i_sysaccess='undef' i_sysdir='define' i_sysfile='define' i_sysfilio='undef' i_sysin='undef' i_sysioctl='define' i_syslog='define' i_sysmman='define' i_sysmode='undef' i_sysmount='define' i_sysndir='undef' i_sysparam='define' i_syspoll='define' i_sysresrc='define' i_syssecrt='undef' i_sysselct='define' i_syssockio='undef' i_sysstat='define' i_sysstatfs='define' i_sysstatvfs='define' i_systime='define' i_systimek='undef' i_systimes='define' i_systypes='define' i_sysuio='define' i_sysun='define' i_sysutsname='define' i_sysvfs='define' i_syswait='define' i_termio='undef' i_termios='define' i_time='define' i_unistd='define' i_ustat='define' i_utime='define' i_values='define' i_varargs='undef' i_varhdr='stdarg.h' i_vfork='undef' ignore_versioned_solibs='y' inc_version_list='5.10.0' inc_version_list_init='"5.10.0",0' incpath='' inews='' initialinstalllocation='/usr/bin' installarchlib='/usr/lib/perl/5.10' installbin='/usr/bin' installhtml1dir='' installhtml3dir='' installman1dir='/usr/share/man/man1' installman3dir='/usr/share/man/man3' installprefix='/usr' installprefixexp='/usr' installprivlib='/usr/share/perl/5.10' installscript='/usr/bin' installsitearch='/usr/local/lib/perl/5.10.1' installsitebin='/usr/local/bin' installsitehtml1dir='' installsitehtml3dir='' installsitelib='/usr/local/share/perl/5.10.1' installsiteman1dir='/usr/local/man/man1' installsiteman3dir='/usr/local/man/man3' installsitescript='/usr/local/bin' installstyle='lib/perl5' installusrbinperl='undef' installvendorarch='/usr/lib/perl5' installvendorbin='/usr/bin' installvendorhtml1dir='' installvendorhtml3dir='' installvendorlib='/usr/share/perl5' installvendorman1dir='/usr/share/man/man1' installvendorman3dir='/usr/share/man/man3' installvendorscript='/usr/bin' intsize='4' issymlink='test -h' ivdformat='"ld"' ivsize='4' ivtype='long' known_extensions='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IO/Compress IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Time/HiRes Time/Piece Unicode/Normalize Win32 Win32API/File Win32CORE XS/APItest XS/Typemap attrs mro re threads threads/shared' ksh='' ld='cc' lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector' ldflags=' -fstack-protector -L/usr/local/lib' ldflags_uselargefiles='' ldlibpthname='LD_LIBRARY_PATH' less='less' lib_ext='.a' libc='/lib/libc-2.11.1.so' libdb_needs_pthread='N' libperl='libperl.so.5.10.1' libpth='/usr/local/lib /lib /usr/lib /usr/lib64' libs='-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt' libsdirs=' /usr/lib' libsfiles=' libgdbm.so libgdbm_compat.so libdb.so libdl.so libm.so libpthread.so libc.so libcrypt.so' libsfound=' /usr/lib/libgdbm.so /usr/lib/libgdbm_compat.so /usr/lib/libdb.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libpthread.so /usr/lib/libc.so /usr/lib/libcrypt.so' libspath=' /usr/local/lib /lib /usr/lib /usr/lib64' libswanted='gdbm gdbm_compat db dl m pthread c crypt gdbm_compat' libswanted_uselargefiles='' line='' lint='' lkflags='' ln='ln' lns='/bin/ln -s' localtime_r_proto='REENTRANT_PROTO_S_TS' locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' longdblsize='12' longlongsize='8' longsize='4' lp='' lpr='' ls='ls' lseeksize='8' lseektype='off_t' mad='undef' madlyh='' madlyobj='' madlysrc='' mail='' mailx='' make='make' make_set_make='#' mallocobj='' mallocsrc='' malloctype='void *' man1dir='/usr/share/man/man1' man1direxp='/usr/share/man/man1' man1ext='1p' man3dir='/usr/share/man/man3' man3direxp='/usr/share/man/man3' man3ext='3pm' mips_type='' mistrustnm='' mkdir='mkdir' mmaptype='void *' modetype='mode_t' more='more' multiarch='undef' mv='' myarchname='i686-linux' mydomain='' myhostname='localhost' myuname='linux vernadsky 2.6.24-27-server #1 smp fri mar 12 01:45:06 utc 2010 i686 gnulinux ' n='-n' need_va_copy='undef' netdb_hlen_type='size_t' netdb_host_type='const void *' netdb_name_type='const char *' netdb_net_type='in_addr_t' nm='nm' nm_opt='' nm_so_opt='--dynamic' nonxs_ext='Attribute/Handlers Errno Module/Pluggable Safe Test/Harness' nroff='nroff' nvEUformat='"E"' nvFUformat='"F"' nvGUformat='"G"' nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0' nv_preserves_uv_bits='32' nveformat='"e"' nvfformat='"f"' nvgformat='"g"' nvsize='8' nvtype='double' o_nonblock='O_NONBLOCK' obj_ext='.o' old_pthread_create_joinable='' optimize='-O2 -g' orderlib='false' osname='linux' osvers='2.6.24-27-server' otherlibdirs=' ' package='perl5' pager='/usr/bin/sensible-pager' passcat='cat /etc/passwd' patchlevel='10' path_sep=':' perl5='/usr/bin/perl' perl='' perl_patchlevel='' perladmin='root@localhost' perllibs='-ldl -lm -lpthread -lc -lcrypt' perlpath='/usr/bin/perl' pg='pg' phostname='hostname' pidtype='pid_t' plibpth='' pmake='' pr='' prefix='/usr' prefixexp='/usr' privlib='/usr/share/perl/5.10' privlibexp='/usr/share/perl/5.10' procselfexe='"/proc/self/exe"' prototype='define' ptrsize='4' quadkind='3' quadtype='long long' randbits='48' randfunc='drand48' random_r_proto='REENTRANT_PROTO_I_St' randseedtype='long' ranlib=':' rd_nodata='-1' readdir64_r_proto='REENTRANT_PROTO_I_TSR' readdir_r_proto='REENTRANT_PROTO_I_TSR' revision='5' rm='rm' rm_try='/bin/rm -f try try a.out .out try.[cho] try..o core core.try* try.core*' rmail='' run='' runnm='false' sGMTIME_max='2147483647' sGMTIME_min='-2147483648' sLOCALTIME_max='2147483647' sLOCALTIME_min='-2147483648' sPRIEUldbl='"LE"' sPRIFUldbl='"LF"' sPRIGUldbl='"LG"' sPRIXU64='"LX"' sPRId64='"Ld"' sPRIeldbl='"Le"' sPRIfldbl='"Lf"' sPRIgldbl='"Lg"' sPRIi64='"Li"' sPRIo64='"Lo"' sPRIu64='"Lu"' sPRIx64='"Lx"' sSCNfldbl='"Lf"' sched_yield='sched_yield()' scriptdir='/usr/bin' scriptdirexp='/usr/bin' sed='sed' seedfunc='srand48' selectminbits='32' selecttype='fd_set *' sendmail='' setgrent_r_proto='0' sethostent_r_proto='0' setlocale_r_proto='0' setnetent_r_proto='0' setprotoent_r_proto='0' setpwent_r_proto='0' setservent_r_proto='0' sh='/bin/sh' shar='' sharpbang='#!' shmattype='void *' shortsize='2' shrpenv='' shsharp='true' sig_count='65' sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED ' sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0' sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 ' sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0' sig_size='69' signal_t='void' sitearch='/usr/local/lib/perl/5.10.1' sitearchexp='/usr/local/lib/perl/5.10.1' sitebin='/usr/local/bin' sitebinexp='/usr/local/bin' sitehtml1dir='' sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp='' sitelib='/usr/local/share/perl/5.10.1' sitelib_stem='' sitelibexp='/usr/local/share/perl/5.10.1' siteman1dir='/usr/local/man/man1' siteman1direxp='/usr/local/man/man1' siteman3dir='/usr/local/man/man3' siteman3direxp='/usr/local/man/man3' siteprefix='/usr/local' siteprefixexp='/usr/local' sitescript='/usr/local/bin' sitescriptexp='/usr/local/bin' sizesize='4' sizetype='size_t' sleep='' smail='' so='so' sockethdr='' socketlib='' socksizetype='socklen_t' sort='sort' spackage='Perl5' spitshell='cat' srand48_r_proto='REENTRANT_PROTO_I_LS' srandom_r_proto='REENTRANT_PROTO_I_TS' src='.' ssizetype='ssize_t' startperl='#!/usr/bin/perl' startsh='#!/bin/sh' static_ext=' ' stdchar='char' stdio_base='((fp)->_IO_read_base)' stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' stdio_filbuf='' stdio_ptr='((fp)->_IO_read_ptr)' stdio_stream_array='' strerror_r_proto='REENTRANT_PROTO_B_IBW' strings='/usr/include/string.h' submit='' subversion='1' sysman='/usr/share/man/man1' tail='' tar='' targetarch='' tbl='' tee='' test='test' timeincl='/usr/include/sys/time.h /usr/include/time.h ' timetype='time_t' tmpnam_r_proto='REENTRANT_PROTO_B_B' to=':' touch='touch' tr='tr' trnl='\n' troff='' ttyname_r_proto='REENTRANT_PROTO_I_IBW' u16size='2' u16type='unsigned short' u32size='4' u32type='unsigned long' u64size='8' u64type='unsigned long long' u8size='1' u8type='unsigned char' uidformat='"lu"' uidsign='1' uidsize='4' uidtype='uid_t' uname='uname' uniq='uniq' uquadtype='unsigned long long' use5005threads='undef' use64bitall='undef' use64bitint='undef' usecrosscompile='undef' usedevel='undef' usedl='define' usedtrace='undef' usefaststdio='undef' useithreads='define' uselargefiles='define' uselongdouble='undef' usemallocwrap='define' usemorebits='undef' usemultiplicity='define' usemymalloc='n' usenm='false' useopcode='true' useperlio='define' useposix='true' usereentrant='undef' userelocatableinc='undef' usesfio='false' useshrplib='true' usesitecustomize='undef' usesocks='undef' usethreads='define' usevendorprefix='define' usevfork='false' usrinc='/usr/include' uuname='' uvXUformat='"lX"' uvoformat='"lo"' uvsize='4' uvtype='unsigned long' uvuformat='"lu"' uvxformat='"lx"' vendorarch='/usr/lib/perl5' vendorarchexp='/usr/lib/perl5' vendorbin='/usr/bin' vendorbinexp='/usr/bin' vendorhtml1dir=' ' vendorhtml1direxp='' vendorhtml3dir=' ' vendorhtml3direxp='' vendorlib='/usr/share/perl5' vendorlib_stem='' vendorlibexp='/usr/share/perl5' vendorman1dir='/usr/share/man/man1' vendorman1direxp='/usr/share/man/man1' vendorman3dir='/usr/share/man/man3' vendorman3direxp='/usr/share/man/man3' vendorprefix='/usr' vendorprefixexp='/usr' vendorscript='/usr/bin' vendorscriptexp='/usr/bin' version='5.10.1' version_patchlevel_string='version 10 subversion 1' versiononly='undef' vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' yacc='yacc' yaccflags='' zcat='' zip='zip' !END! my $i = 0; foreach my $c (4,3,2) { $i |= ord($c); $i <<= 8 } $i |= ord(1); our $byteorder = join('', unpack('aaaa', pack('L!', $i))); s/(byteorder=)(['"]).*?\2/$1$2$Config::byteorder$2/m; my $config_sh_len = length $_; our $Config_SH_expanded = "\n$_" . << 'EOVIRTUAL'; ccflags_nolargefiles='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include ' ldflags_nolargefiles=' -fstack-protector -L/usr/local/lib' libs_nolargefiles='-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt' libswanted_nolargefiles='gdbm gdbm_compat db dl m pthread c crypt gdbm_compat' EOVIRTUAL eval { # do not have hairy conniptions if this isnt available require 'Config_git.pl'; $Config_SH_expanded .= $Config::Git_Data; 1; } or warn "Warning: failed to load Config_git.pl, something strange about this perl...\n"; # Search for it in the big string sub fetch_string { my($self, $key) = @_; # We only have ' delimted. my $start = index($Config_SH_expanded, "\n$key=\'"); # Start can never be -1 now, as we've rigged the long string we're # searching with an initial dummy newline. return undef if $start == -1; $start += length($key) + 3; my $value = substr($Config_SH_expanded, $start, index($Config_SH_expanded, "'\n", $start) - $start); # So we can say "if $Config{'foo'}". $value = undef if $value eq 'undef'; $self->{$key} = $value; # cache it } my $prevpos = 0; sub FIRSTKEY { $prevpos = 0; substr($Config_SH_expanded, 1, index($Config_SH_expanded, '=') - 1 ); } sub NEXTKEY { my $pos = index($Config_SH_expanded, qq('\n), $prevpos) + 2; my $len = index($Config_SH_expanded, "=", $pos) - $pos; $prevpos = $pos; $len > 0 ? substr($Config_SH_expanded, $pos, $len) : undef; } sub EXISTS { return 1 if exists($_[0]->{$_[1]}); return(index($Config_SH_expanded, "\n$_[1]='") != -1 ); } sub STORE { die "\%Config::Config is read-only\n" } *DELETE = \&STORE; *CLEAR = \&STORE; sub config_sh { substr $Config_SH_expanded, 1, $config_sh_len; } sub config_re { my $re = shift; return map { chomp; $_ } grep eval{ /^(?:$re)=/ }, split /^/, $Config_SH_expanded; } sub config_vars { # implements -V:cfgvar option (see perlrun -V:) foreach (@_) { # find optional leading, trailing colons; and query-spec my ($notag,$qry,$lncont) = m/^(:)?(.*?)(:)?$/; # flags fore and aft, # map colon-flags to print decorations my $prfx = $notag ? '': "$qry="; # tag-prefix for print my $lnend = $lncont ? ' ' : ";\n"; # line ending for print # all config-vars are by definition \w only, any \W means regex if ($qry =~ /\W/) { my @matches = config_re($qry); print map "$_$lnend", @matches ? @matches : "$qry: not found" if !$notag; print map { s/\w+=//; "$_$lnend" } @matches ? @matches : "$qry: not found" if $notag; } else { my $v = (exists $Config::Config{$qry}) ? $Config::Config{$qry} : 'UNKNOWN'; $v = 'undef' unless defined $v; print "${prfx}'${v}'$lnend"; } } } # Called by the real AUTOLOAD sub launcher { undef &AUTOLOAD; goto \&$Config::AUTOLOAD; } 1; FILE6aa0777c/DynaLoader.pm#line 1 "/usr/lib/perl/5.10/DynaLoader.pm" # Generated from DynaLoader_pm.PL package DynaLoader; # And Gandalf said: 'Many folk like to know beforehand what is to # be set on the table; but those who have laboured to prepare the # feast like to keep their secret; for wonder makes the words of # praise louder.' # (Quote from Tolkien suggested by Anno Siegel.) # # See pod text at end of file for documentation. # See also ext/DynaLoader/README in source tree for other information. # # Tim.Bunce@ig.co.uk, August 1994 BEGIN { $VERSION = '1.10'; } require AutoLoader; *AUTOLOAD = \&AutoLoader::AUTOLOAD; use Config; # enable debug/trace messages from DynaLoader perl code $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug; # # Flags to alter dl_load_file behaviour. Assigned bits: # 0x01 make symbols available for linking later dl_load_file's. # (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL)) # (ignored under VMS; effect is built-in to image linking) # # This is called as a class method $module->dl_load_flags. The # definition here will be inherited and result on "default" loading # behaviour unless a sub-class of DynaLoader defines its own version. # sub dl_load_flags { 0x00 } ($dl_dlext, $dl_so, $dlsrc) = ('so','so','dl_dlopen.xs') ; $do_expand = 0; @dl_require_symbols = (); # names of symbols we need @dl_resolve_using = (); # names of files to link with @dl_library_path = (); # path to look for files #XSLoader.pm may have added elements before we were required #@dl_shared_objects = (); # shared objects for symbols we have #@dl_librefs = (); # things we have loaded #@dl_modules = (); # Modules we have loaded # This is a fix to support DLD's unfortunate desire to relink -lc @dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs"; # Initialise @dl_library_path with the 'standard' library path # for this platform as determined by Configure. push(@dl_library_path, split(' ', $Config::Config{libpth})); my $ldlibpthname = $Config::Config{ldlibpthname}; my $ldlibpthname_defined = defined $Config::Config{ldlibpthname}; my $pthsep = $Config::Config{path_sep}; # Add to @dl_library_path any extra directories we can gather from environment # during runtime. if ($ldlibpthname_defined && exists $ENV{$ldlibpthname}) { push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname})); } # E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH. if ($ldlibpthname_defined && $ldlibpthname ne 'LD_LIBRARY_PATH' && exists $ENV{LD_LIBRARY_PATH}) { push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH})); } # No prizes for guessing why we don't say 'bootstrap DynaLoader;' here. # NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) && !defined(&dl_error); if ($dl_debug) { print STDERR "DynaLoader.pm loaded (@INC, @dl_library_path)\n"; print STDERR "DynaLoader not linked into this perl\n" unless defined(&boot_DynaLoader); } 1; # End of main code sub croak { require Carp; Carp::croak(@_) } sub bootstrap_inherit { my $module = $_[0]; local *isa = *{"$module\::ISA"}; local @isa = (@isa, 'DynaLoader'); # Cannot goto due to delocalization. Will report errors on a wrong line? bootstrap(@_); } # The bootstrap function cannot be autoloaded (without complications) # so we define it here: sub bootstrap { # use local vars to enable $module.bs script to edit values local(@args) = @_; local($module) = $args[0]; local(@dirs, $file); unless ($module) { require Carp; Carp::confess("Usage: DynaLoader::bootstrap(module)"); } # A common error on platforms which don't support dynamic loading. # Since it's fatal and potentially confusing we give a detailed message. croak("Can't load module $module, dynamic loading not available in this perl.\n". " (You may need to build a new perl executable which either supports\n". " dynamic loading or has the $module module statically linked into it.)\n") unless defined(&dl_load_file); my @modparts = split(/::/,$module); my $modfname = $modparts[-1]; # Some systems have restrictions on files names for DLL's etc. # mod2fname returns appropriate file base name (typically truncated) # It may also edit @modparts if required. $modfname = &mod2fname(\@modparts) if defined &mod2fname; my $modpname = join('/',@modparts); print STDERR "DynaLoader::bootstrap for $module ", "(auto/$modpname/$modfname.$dl_dlext)\n" if $dl_debug; foreach (@INC) { my $dir = "$_/auto/$modpname"; next unless -d $dir; # skip over uninteresting directories # check for common cases to avoid autoload of dl_findfile my $try = "$dir/$modfname.$dl_dlext"; last if $file = ($do_expand) ? dl_expandspec($try) : ((-f $try) && $try); # no luck here, save dir for possible later dl_findfile search push @dirs, $dir; } # last resort, let dl_findfile have a go in all known locations $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file; croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)") unless $file; # wording similar to error from 'require' my $bootname = "boot_$module"; $bootname =~ s/\W/_/g; @dl_require_symbols = ($bootname); # Execute optional '.bootstrap' perl script for this module. # The .bs file can be used to configure @dl_resolve_using etc to # match the needs of the individual module on this architecture. my $bs = $file; $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library if (-s $bs) { # only read file if it's not empty print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug; eval { do $bs; }; warn "$bs: $@\n" if $@; } my $boot_symbol_ref; # Many dynamic extension loading problems will appear to come from # this section of code: XYZ failed at line 123 of DynaLoader.pm. # Often these errors are actually occurring in the initialisation # C code of the extension XS file. Perl reports the error as being # in this perl code simply because this was the last perl code # it executed. my $libref = dl_load_file($file, $module->dl_load_flags) or croak("Can't load '$file' for module $module: ".dl_error()); push(@dl_librefs,$libref); # record loaded object my @unresolved = dl_undef_symbols(); if (@unresolved) { require Carp; Carp::carp("Undefined symbols present after loading $file: @unresolved\n"); } $boot_symbol_ref = dl_find_symbol($libref, $bootname) or croak("Can't find '$bootname' symbol in $file\n"); push(@dl_modules, $module); # record loaded module boot: my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file); # See comment block above push(@dl_shared_objects, $file); # record files loaded &$xs(@args); } #sub _check_file { # private utility to handle dl_expandspec vs -f tests # my($file) = @_; # return $file if (!$do_expand && -f $file); # the common case # return $file if ( $do_expand && ($file=dl_expandspec($file))); # return undef; #} # Let autosplit and the autoloader deal with these functions: FILEc120fc56/Errno.pm#line 1 "/usr/lib/perl/5.10/Errno.pm" # # This file is auto-generated. ***ANY*** changes here will be lost # package Errno; our (@EXPORT_OK,%EXPORT_TAGS,@ISA,$VERSION,%errno,$AUTOLOAD); use Exporter (); use strict; $VERSION = "1.11"; $VERSION = eval $VERSION; @ISA = qw(Exporter); @EXPORT_OK = qw(EBADR ENOMSG ENOTSUP ESTRPIPE EADDRINUSE EL3HLT EBADF ENOTBLK ENAVAIL ECHRNG ENOTNAM ELNRNG ENOKEY EXDEV EBADE EBADSLT ECONNREFUSED ENOSTR ENONET EOVERFLOW EISCONN EFBIG EKEYREVOKED ECONNRESET EWOULDBLOCK ELIBMAX EREMOTEIO ERFKILL ENOPKG ELIBSCN EDESTADDRREQ ENOTSOCK EIO EMEDIUMTYPE EINPROGRESS ERANGE EAFNOSUPPORT EADDRNOTAVAIL EINTR EREMOTE EILSEQ ENOMEM EPIPE ENETUNREACH ENODATA EUSERS EOPNOTSUPP EPROTO EISNAM ESPIPE EALREADY ENAMETOOLONG ENOEXEC EISDIR EBADRQC EEXIST EDOTDOT ELIBBAD EOWNERDEAD ESRCH EFAULT EXFULL EDEADLOCK EAGAIN ENOPROTOOPT ENETDOWN EPROTOTYPE EL2NSYNC ENETRESET EUCLEAN EADV EROFS ESHUTDOWN EMULTIHOP EPROTONOSUPPORT ENFILE ENOLCK ECONNABORTED ECANCELED EDEADLK ESRMNT ENOLINK ETIME ENOTDIR EINVAL ENOTTY ENOANO ELOOP ENOENT EPFNOSUPPORT EBADMSG ENOMEDIUM EL2HLT EDOM EBFONT EKEYEXPIRED EMSGSIZE ENOCSI EL3RST ENOSPC EIDRM ENOBUFS ENOSYS EHOSTDOWN EBADFD ENOSR ENOTCONN ESTALE EDQUOT EKEYREJECTED EMFILE ENOTRECOVERABLE EACCES EBUSY E2BIG EPERM ELIBEXEC ETOOMANYREFS ELIBACC ENOTUNIQ ECOMM ERESTART ESOCKTNOSUPPORT EUNATCH ETIMEDOUT ENXIO ENODEV ETXTBSY EMLINK ECHILD EHOSTUNREACH EREMCHG ENOTEMPTY); %EXPORT_TAGS = ( POSIX => [qw( E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM EPFNOSUPPORT EPIPE EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK EXDEV )] ); sub EPERM () { 1 } sub ENOENT () { 2 } sub ESRCH () { 3 } sub EINTR () { 4 } sub EIO () { 5 } sub ENXIO () { 6 } sub E2BIG () { 7 } sub ENOEXEC () { 8 } sub EBADF () { 9 } sub ECHILD () { 10 } sub EWOULDBLOCK () { 11 } sub EAGAIN () { 11 } sub ENOMEM () { 12 } sub EACCES () { 13 } sub EFAULT () { 14 } sub ENOTBLK () { 15 } sub EBUSY () { 16 } sub EEXIST () { 17 } sub EXDEV () { 18 } sub ENODEV () { 19 } sub ENOTDIR () { 20 } sub EISDIR () { 21 } sub EINVAL () { 22 } sub ENFILE () { 23 } sub EMFILE () { 24 } sub ENOTTY () { 25 } sub ETXTBSY () { 26 } sub EFBIG () { 27 } sub ENOSPC () { 28 } sub ESPIPE () { 29 } sub EROFS () { 30 } sub EMLINK () { 31 } sub EPIPE () { 32 } sub EDOM () { 33 } sub ERANGE () { 34 } sub EDEADLOCK () { 35 } sub EDEADLK () { 35 } sub ENAMETOOLONG () { 36 } sub ENOLCK () { 37 } sub ENOSYS () { 38 } sub ENOTEMPTY () { 39 } sub ELOOP () { 40 } sub ENOMSG () { 42 } sub EIDRM () { 43 } sub ECHRNG () { 44 } sub EL2NSYNC () { 45 } sub EL3HLT () { 46 } sub EL3RST () { 47 } sub ELNRNG () { 48 } sub EUNATCH () { 49 } sub ENOCSI () { 50 } sub EL2HLT () { 51 } sub EBADE () { 52 } sub EBADR () { 53 } sub EXFULL () { 54 } sub ENOANO () { 55 } sub EBADRQC () { 56 } sub EBADSLT () { 57 } sub EBFONT () { 59 } sub ENOSTR () { 60 } sub ENODATA () { 61 } sub ETIME () { 62 } sub ENOSR () { 63 } sub ENONET () { 64 } sub ENOPKG () { 65 } sub EREMOTE () { 66 } sub ENOLINK () { 67 } sub EADV () { 68 } sub ESRMNT () { 69 } sub ECOMM () { 70 } sub EPROTO () { 71 } sub EMULTIHOP () { 72 } sub EDOTDOT () { 73 } sub EBADMSG () { 74 } sub EOVERFLOW () { 75 } sub ENOTUNIQ () { 76 } sub EBADFD () { 77 } sub EREMCHG () { 78 } sub ELIBACC () { 79 } sub ELIBBAD () { 80 } sub ELIBSCN () { 81 } sub ELIBMAX () { 82 } sub ELIBEXEC () { 83 } sub EILSEQ () { 84 } sub ERESTART () { 85 } sub ESTRPIPE () { 86 } sub EUSERS () { 87 } sub ENOTSOCK () { 88 } sub EDESTADDRREQ () { 89 } sub EMSGSIZE () { 90 } sub EPROTOTYPE () { 91 } sub ENOPROTOOPT () { 92 } sub EPROTONOSUPPORT () { 93 } sub ESOCKTNOSUPPORT () { 94 } sub ENOTSUP () { 95 } sub EOPNOTSUPP () { 95 } sub EPFNOSUPPORT () { 96 } sub EAFNOSUPPORT () { 97 } sub EADDRINUSE () { 98 } sub EADDRNOTAVAIL () { 99 } sub ENETDOWN () { 100 } sub ENETUNREACH () { 101 } sub ENETRESET () { 102 } sub ECONNABORTED () { 103 } sub ECONNRESET () { 104 } sub ENOBUFS () { 105 } sub EISCONN () { 106 } sub ENOTCONN () { 107 } sub ESHUTDOWN () { 108 } sub ETOOMANYREFS () { 109 } sub ETIMEDOUT () { 110 } sub ECONNREFUSED () { 111 } sub EHOSTDOWN () { 112 } sub EHOSTUNREACH () { 113 } sub EALREADY () { 114 } sub EINPROGRESS () { 115 } sub ESTALE () { 116 } sub EUCLEAN () { 117 } sub ENOTNAM () { 118 } sub ENAVAIL () { 119 } sub EISNAM () { 120 } sub EREMOTEIO () { 121 } sub EDQUOT () { 122 } sub ENOMEDIUM () { 123 } sub EMEDIUMTYPE () { 124 } sub ECANCELED () { 125 } sub ENOKEY () { 126 } sub EKEYEXPIRED () { 127 } sub EKEYREVOKED () { 128 } sub EKEYREJECTED () { 129 } sub EOWNERDEAD () { 130 } sub ENOTRECOVERABLE () { 131 } sub ERFKILL () { 132 } sub TIEHASH { bless [] } sub FETCH { my ($self, $errname) = @_; my $proto = prototype("Errno::$errname"); my $errno = ""; if (defined($proto) && $proto eq "") { no strict 'refs'; $errno = &$errname; $errno = 0 unless $! == $errno; } return $errno; } sub STORE { require Carp; Carp::confess("ERRNO hash is read only!"); } *CLEAR = \&STORE; *DELETE = \&STORE; sub NEXTKEY { my($k,$v); while(($k,$v) = each %Errno::) { my $proto = prototype("Errno::$k"); last if (defined($proto) && $proto eq ""); } $k } sub FIRSTKEY { my $s = scalar keys %Errno::; # initialize iterator goto &NEXTKEY; } sub EXISTS { my ($self, $errname) = @_; my $r = ref $errname; my $proto = !$r || $r eq 'CODE' ? prototype($errname) : undef; defined($proto) && $proto eq ""; } tie %!, __PACKAGE__; 1; __END__ FILE9db388f9/Fcntl.pm #line 1 "/usr/lib/perl/5.10/Fcntl.pm" package Fcntl; use strict; our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD); require Exporter; use XSLoader (); @ISA = qw(Exporter); BEGIN { $VERSION = "1.06"; } # Items to export into callers namespace by default # (move infrequently used names to @EXPORT_OK below) @EXPORT = qw( FD_CLOEXEC F_ALLOCSP F_ALLOCSP64 F_COMPAT F_DUP2FD F_DUPFD F_EXLCK F_FREESP F_FREESP64 F_FSYNC F_FSYNC64 F_GETFD F_GETFL F_GETLK F_GETLK64 F_GETOWN F_NODNY F_POSIX F_RDACC F_RDDNY F_RDLCK F_RWACC F_RWDNY F_SETFD F_SETFL F_SETLK F_SETLK64 F_SETLKW F_SETLKW64 F_SETOWN F_SHARE F_SHLCK F_UNLCK F_UNSHARE F_WRACC F_WRDNY F_WRLCK O_ACCMODE O_ALIAS O_APPEND O_ASYNC O_BINARY O_CREAT O_DEFER O_DIRECT O_DIRECTORY O_DSYNC O_EXCL O_EXLOCK O_LARGEFILE O_NDELAY O_NOCTTY O_NOFOLLOW O_NOINHERIT O_NONBLOCK O_RANDOM O_RAW O_RDONLY O_RDWR O_RSRC O_RSYNC O_SEQUENTIAL O_SHLOCK O_SYNC O_TEMPORARY O_TEXT O_TRUNC O_WRONLY ); # Other items we are prepared to export if requested @EXPORT_OK = qw( DN_ACCESS DN_ATTRIB DN_CREATE DN_DELETE DN_MODIFY DN_MULTISHOT DN_RENAME FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC F_GETLEASE F_GETSIG F_NOTIFY F_SETLEASE F_SETSIG LOCK_EX LOCK_MAND LOCK_NB LOCK_READ LOCK_RW LOCK_SH LOCK_UN LOCK_WRITE O_IGNORE_CTTY O_NOATIME O_NOLINK O_NOTRANS SEEK_CUR SEEK_END SEEK_SET S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT S_IREAD S_IWRITE S_IEXEC S_IRGRP S_IWGRP S_IXGRP S_IRWXG S_IROTH S_IWOTH S_IXOTH S_IRWXO S_IRUSR S_IWUSR S_IXUSR S_IRWXU S_ISUID S_ISGID S_ISVTX S_ISTXT _S_IFMT S_IFREG S_IFDIR S_IFLNK &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE ); # Named groups of exports %EXPORT_TAGS = ( 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)], 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)], 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)], 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT _S_IFMT S_IFREG S_IFDIR S_IFLNK S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT S_IRUSR S_IWUSR S_IXUSR S_IRWXU S_IRGRP S_IWGRP S_IXGRP S_IRWXG S_IROTH S_IWOTH S_IXOTH S_IRWXO S_IREAD S_IWRITE S_IEXEC S_ISREG S_ISDIR S_ISLNK S_ISSOCK S_ISBLK S_ISCHR S_ISFIFO S_ISWHT S_ISENFMT S_IFMT S_IMODE )], ); # Force the constants to become inlined BEGIN { XSLoader::load 'Fcntl', $VERSION; } sub S_IFMT { @_ ? ( $_[0] & _S_IFMT() ) : _S_IFMT() } sub S_IMODE { $_[0] & 07777 } sub S_ISREG { ( $_[0] & _S_IFMT() ) == S_IFREG() } sub S_ISDIR { ( $_[0] & _S_IFMT() ) == S_IFDIR() } sub S_ISLNK { ( $_[0] & _S_IFMT() ) == S_IFLNK() } sub S_ISSOCK { ( $_[0] & _S_IFMT() ) == S_IFSOCK() } sub S_ISBLK { ( $_[0] & _S_IFMT() ) == S_IFBLK() } sub S_ISCHR { ( $_[0] & _S_IFMT() ) == S_IFCHR() } sub S_ISFIFO { ( $_[0] & _S_IFMT() ) == S_IFIFO() } sub S_ISWHT { ( $_[0] & _S_IFMT() ) == S_IFWHT() } sub S_ISENFMT { ( $_[0] & _S_IFMT() ) == S_IFENFMT() } sub AUTOLOAD { (my $constname = $AUTOLOAD) =~ s/.*:://; die "&Fcntl::constant not defined" if $constname eq 'constant'; my ($error, $val) = constant($constname); if ($error) { my (undef,$file,$line) = caller; die "$error at $file line $line.\n"; } no strict 'refs'; *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; } 1; FILEdc534d44/File/Glob.pm#line 1 "/usr/lib/perl/5.10/File/Glob.pm" package File::Glob; use strict; our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS, $AUTOLOAD, $DEFAULT_FLAGS); use XSLoader (); @ISA = qw(Exporter); # NOTE: The glob() export is only here for compatibility with 5.6.0. # csh_glob() should not be used directly, unless you know what you're doing. @EXPORT_OK = qw( csh_glob bsd_glob glob GLOB_ABEND GLOB_ALPHASORT GLOB_ALTDIRFUNC GLOB_BRACE GLOB_CSH GLOB_ERR GLOB_ERROR GLOB_LIMIT GLOB_MARK GLOB_NOCASE GLOB_NOCHECK GLOB_NOMAGIC GLOB_NOSORT GLOB_NOSPACE GLOB_QUOTE GLOB_TILDE ); %EXPORT_TAGS = ( 'glob' => [ qw( GLOB_ABEND GLOB_ALPHASORT GLOB_ALTDIRFUNC GLOB_BRACE GLOB_CSH GLOB_ERR GLOB_ERROR GLOB_LIMIT GLOB_MARK GLOB_NOCASE GLOB_NOCHECK GLOB_NOMAGIC GLOB_NOSORT GLOB_NOSPACE GLOB_QUOTE GLOB_TILDE glob bsd_glob ) ], ); $VERSION = '1.06'; sub import { require Exporter; my $i = 1; while ($i < @_) { if ($_[$i] =~ /^:(case|nocase|globally)$/) { splice(@_, $i, 1); $DEFAULT_FLAGS &= ~GLOB_NOCASE() if $1 eq 'case'; $DEFAULT_FLAGS |= GLOB_NOCASE() if $1 eq 'nocase'; if ($1 eq 'globally') { local $^W; *CORE::GLOBAL::glob = \&File::Glob::csh_glob; } next; } ++$i; } goto &Exporter::import; } sub AUTOLOAD { # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. If a constant is not found then control is passed # to the AUTOLOAD in AutoLoader. my $constname; ($constname = $AUTOLOAD) =~ s/.*:://; my ($error, $val) = constant($constname); if ($error) { require Carp; Carp::croak($error); } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } XSLoader::load 'File::Glob', $VERSION; # Preloaded methods go here. sub GLOB_ERROR { return (constant('GLOB_ERROR'))[1]; } sub GLOB_CSH () { GLOB_BRACE() | GLOB_NOMAGIC() | GLOB_QUOTE() | GLOB_TILDE() | GLOB_ALPHASORT() } $DEFAULT_FLAGS = GLOB_CSH(); if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos|MacOS)$/) { $DEFAULT_FLAGS |= GLOB_NOCASE(); } # Autoload methods go after =cut, and are processed by the autosplit program. sub bsd_glob { my ($pat,$flags) = @_; $flags = $DEFAULT_FLAGS if @_ < 2; return doglob($pat,$flags); } # File::Glob::glob() is deprecated because its prototype is different from # CORE::glob() (use bsd_glob() instead) sub glob { splice @_, 1; # don't pass PL_glob_index as flags! goto &bsd_glob; } ## borrowed heavily from gsar's File::DosGlob my %iter; my %entries; sub csh_glob { my $pat = shift; my $cxix = shift; my @pat; # glob without args defaults to $_ $pat = $_ unless defined $pat; # extract patterns $pat =~ s/^\s+//; # Protect against empty elements in $pat =~ s/\s+$//; # things like < *.c> and <*.c >. # These alone shouldn't trigger ParseWords. if ($pat =~ /\s/) { # XXX this is needed for compatibility with the csh # implementation in Perl. Need to support a flag # to disable this behavior. require Text::ParseWords; @pat = Text::ParseWords::parse_line('\s+',0,$pat); } # assume global context if not provided one $cxix = '_G_' unless defined $cxix; $iter{$cxix} = 0 unless exists $iter{$cxix}; # if we're just beginning, do it all first if ($iter{$cxix} == 0) { if (@pat) { $entries{$cxix} = [ map { doglob($_, $DEFAULT_FLAGS) } @pat ]; } else { $entries{$cxix} = [ doglob($pat, $DEFAULT_FLAGS) ]; } } # chuck it all out, quick or slow if (wantarray) { delete $iter{$cxix}; return @{delete $entries{$cxix}}; } else { if ($iter{$cxix} = scalar @{$entries{$cxix}}) { return shift @{$entries{$cxix}}; } else { # return undef for EOL delete $iter{$cxix}; delete $entries{$cxix}; return undef; } } } 1; __END__ FILE9479d5fa/IO.pm#line 1 "/usr/lib/perl/5.10/IO.pm" # package IO; use XSLoader (); use Carp; use strict; use warnings; our $VERSION = "1.25"; XSLoader::load 'IO', $VERSION; sub import { shift; warnings::warnif('deprecated', qq{Parameterless "use IO" deprecated}) if @_ == 0 ; my @l = @_ ? @_ : qw(Handle Seekable File Pipe Socket Dir); eval join("", map { "require IO::" . (/(\w+)/)[0] . ";\n" } @l) or croak $@; } 1; __END__ FILE16c9c1ce/IO/File.pm#line 1 "/usr/lib/perl/5.10/IO/File.pm" # package IO::File; use 5.006_001; use strict; our($VERSION, @EXPORT, @EXPORT_OK, @ISA); use Carp; use Symbol; use SelectSaver; use IO::Seekable; use File::Spec; require Exporter; @ISA = qw(IO::Handle IO::Seekable Exporter); $VERSION = "1.14"; @EXPORT = @IO::Seekable::EXPORT; eval { # Make all Fcntl O_XXX constants available for importing require Fcntl; my @O = grep /^O_/, @Fcntl::EXPORT; Fcntl->import(@O); # first we import what we want to export push(@EXPORT, @O); }; ################################################ ## Constructor ## sub new { my $type = shift; my $class = ref($type) || $type || "IO::File"; @_ >= 0 && @_ <= 3 or croak "usage: new $class [FILENAME [,MODE [,PERMS]]]"; my $fh = $class->SUPER::new(); if (@_) { $fh->open(@_) or return undef; } $fh; } ################################################ ## Open ## sub open { @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])'; my ($fh, $file) = @_; if (@_ > 2) { my ($mode, $perms) = @_[2, 3]; if ($mode =~ /^\d+$/) { defined $perms or $perms = 0666; return sysopen($fh, $file, $mode, $perms); } elsif ($mode =~ /:/) { return open($fh, $mode, $file) if @_ == 3; croak 'usage: $fh->open(FILENAME, IOLAYERS)'; } else { return open($fh, IO::Handle::_open_mode_string($mode), $file); } } open($fh, $file); } ################################################ ## Binmode ## sub binmode { ( @_ == 1 or @_ == 2 ) or croak 'usage $fh->binmode([LAYER])'; my($fh, $layer) = @_; return binmode $$fh unless $layer; return binmode $$fh, $layer; } 1; FILEd8a7c14b/IO/Handle.pm9#line 1 "/usr/lib/perl/5.10/IO/Handle.pm" package IO::Handle; use 5.006_001; use strict; our($VERSION, @EXPORT_OK, @ISA); use Carp; use Symbol; use SelectSaver; use IO (); # Load the XS module require Exporter; @ISA = qw(Exporter); $VERSION = "1.28"; $VERSION = eval $VERSION; @EXPORT_OK = qw( autoflush output_field_separator output_record_separator input_record_separator input_line_number format_page_number format_lines_per_page format_lines_left format_name format_top_name format_line_break_characters format_formfeed format_write print printf say getline getlines printflush flush SEEK_SET SEEK_CUR SEEK_END _IOFBF _IOLBF _IONBF ); ################################################ ## Constructors, destructors. ## sub new { my $class = ref($_[0]) || $_[0] || "IO::Handle"; @_ == 1 or croak "usage: new $class"; my $io = gensym; bless $io, $class; } sub new_from_fd { my $class = ref($_[0]) || $_[0] || "IO::Handle"; @_ == 3 or croak "usage: new_from_fd $class FD, MODE"; my $io = gensym; shift; IO::Handle::fdopen($io, @_) or return undef; bless $io, $class; } # # There is no need for DESTROY to do anything, because when the # last reference to an IO object is gone, Perl automatically # closes its associated files (if any). However, to avoid any # attempts to autoload DESTROY, we here define it to do nothing. # sub DESTROY {} ################################################ ## Open and close. ## sub _open_mode_string { my ($mode) = @_; $mode =~ /^\+?(<|>>?)$/ or $mode =~ s/^r(\+?)$/$1/ or $mode =~ s/^a(\+?)$/$1>>/ or croak "IO::Handle: bad open mode: $mode"; $mode; } sub fdopen { @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)'; my ($io, $fd, $mode) = @_; local(*GLOB); if (ref($fd) && "".$fd =~ /GLOB\(/o) { # It's a glob reference; Alias it as we cannot get name of anon GLOBs my $n = qualify(*GLOB); *GLOB = *{*$fd}; $fd = $n; } elsif ($fd =~ m#^\d+$#) { # It's an FD number; prefix with "=". $fd = "=$fd"; } open($io, _open_mode_string($mode) . '&' . $fd) ? $io : undef; } sub close { @_ == 1 or croak 'usage: $io->close()'; my($io) = @_; close($io); } ################################################ ## Normal I/O functions. ## # flock # select sub opened { @_ == 1 or croak 'usage: $io->opened()'; defined fileno($_[0]); } sub fileno { @_ == 1 or croak 'usage: $io->fileno()'; fileno($_[0]); } sub getc { @_ == 1 or croak 'usage: $io->getc()'; getc($_[0]); } sub eof { @_ == 1 or croak 'usage: $io->eof()'; eof($_[0]); } sub print { @_ or croak 'usage: $io->print(ARGS)'; my $this = shift; print $this @_; } sub printf { @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])'; my $this = shift; printf $this @_; } sub say { @_ or croak 'usage: $io->say(ARGS)'; my $this = shift; local $\ = "\n"; print $this @_; } sub getline { @_ == 1 or croak 'usage: $io->getline()'; my $this = shift; return scalar <$this>; } *gets = \&getline; # deprecated sub getlines { @_ == 1 or croak 'usage: $io->getlines()'; wantarray or croak 'Can\'t call $io->getlines in a scalar context, use $io->getline'; my $this = shift; return <$this>; } sub truncate { @_ == 2 or croak 'usage: $io->truncate(LEN)'; truncate($_[0], $_[1]); } sub read { @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])'; read($_[0], $_[1], $_[2], $_[3] || 0); } sub sysread { @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])'; sysread($_[0], $_[1], $_[2], $_[3] || 0); } sub write { @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])'; local($\) = ""; $_[2] = length($_[1]) unless defined $_[2]; print { $_[0] } substr($_[1], $_[3] || 0, $_[2]); } sub syswrite { @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])'; if (defined($_[2])) { syswrite($_[0], $_[1], $_[2], $_[3] || 0); } else { syswrite($_[0], $_[1]); } } sub stat { @_ == 1 or croak 'usage: $io->stat()'; stat($_[0]); } ################################################ ## State modification functions. ## sub autoflush { my $old = new SelectSaver qualify($_[0], caller); my $prev = $|; $| = @_ > 1 ? $_[1] : 1; $prev; } sub output_field_separator { carp "output_field_separator is not supported on a per-handle basis" if ref($_[0]); my $prev = $,; $, = $_[1] if @_ > 1; $prev; } sub output_record_separator { carp "output_record_separator is not supported on a per-handle basis" if ref($_[0]); my $prev = $\; $\ = $_[1] if @_ > 1; $prev; } sub input_record_separator { carp "input_record_separator is not supported on a per-handle basis" if ref($_[0]); my $prev = $/; $/ = $_[1] if @_ > 1; $prev; } sub input_line_number { local $.; () = tell qualify($_[0], caller) if ref($_[0]); my $prev = $.; $. = $_[1] if @_ > 1; $prev; } sub format_page_number { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $%; $% = $_[1] if @_ > 1; $prev; } sub format_lines_per_page { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $=; $= = $_[1] if @_ > 1; $prev; } sub format_lines_left { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $-; $- = $_[1] if @_ > 1; $prev; } sub format_name { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $~; $~ = qualify($_[1], caller) if @_ > 1; $prev; } sub format_top_name { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $^; $^ = qualify($_[1], caller) if @_ > 1; $prev; } sub format_line_break_characters { carp "format_line_break_characters is not supported on a per-handle basis" if ref($_[0]); my $prev = $:; $: = $_[1] if @_ > 1; $prev; } sub format_formfeed { carp "format_formfeed is not supported on a per-handle basis" if ref($_[0]); my $prev = $^L; $^L = $_[1] if @_ > 1; $prev; } sub formline { my $io = shift; my $picture = shift; local($^A) = $^A; local($\) = ""; formline($picture, @_); print $io $^A; } sub format_write { @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )'; if (@_ == 2) { my ($io, $fmt) = @_; my $oldfmt = $io->format_name(qualify($fmt,caller)); CORE::write($io); $io->format_name($oldfmt); } else { CORE::write($_[0]); } } sub fcntl { @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );'; my ($io, $op) = @_; return fcntl($io, $op, $_[2]); } sub ioctl { @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );'; my ($io, $op) = @_; return ioctl($io, $op, $_[2]); } # this sub is for compatability with older releases of IO that used # a sub called constant to detemine if a constant existed -- GMB # # The SEEK_* and _IO?BF constants were the only constants at that time # any new code should just chech defined(&CONSTANT_NAME) sub constant { no strict 'refs'; my $name = shift; (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name}) ? &{$name}() : undef; } # so that flush.pl can be deprecated sub printflush { my $io = shift; my $old; $old = new SelectSaver qualify($io, caller) if ref($io); local $| = 1; if(ref($io)) { print $io @_; } else { print @_; } } 1; FILE6d091c9e/IO/Seekable.pm#line 1 "/usr/lib/perl/5.10/IO/Seekable.pm" # package IO::Seekable; use 5.006_001; use Carp; use strict; our($VERSION, @EXPORT, @ISA); use IO::Handle (); # XXX we can't get these from IO::Handle or we'll get prototype # mismatch warnings on C :-( use Fcntl qw(SEEK_SET SEEK_CUR SEEK_END); require Exporter; @EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END); @ISA = qw(Exporter); $VERSION = "1.10"; $VERSION = eval $VERSION; sub seek { @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)'; seek($_[0], $_[1], $_[2]); } sub sysseek { @_ == 3 or croak 'usage: $io->sysseek(POS, WHENCE)'; sysseek($_[0], $_[1], $_[2]); } sub tell { @_ == 1 or croak 'usage: $io->tell()'; tell($_[0]); } 1; FILEd2fce79b/PerlIO/scalar.pm#line 1 "/usr/lib/perl/5.10/PerlIO/scalar.pm" package PerlIO::scalar; our $VERSION = '0.07'; use XSLoader (); XSLoader::load 'PerlIO::scalar'; 1; __END__ #line 42 FILE08fb2975/XSLoader.pm #line 1 "/usr/lib/perl/5.10/XSLoader.pm" # Generated from XSLoader.pm.PL (resolved %Config::Config value) package XSLoader; $VERSION = "0.10"; #use strict; # enable debug/trace messages from DynaLoader perl code # $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug; my $dl_dlext = 'so'; package DynaLoader; # No prizes for guessing why we don't say 'bootstrap DynaLoader;' here. # NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) && !defined(&dl_error); package XSLoader; sub load { package DynaLoader; die q{XSLoader::load('Your::Module', $Your::Module::VERSION)} unless @_; my($module) = $_[0]; # work with static linking too my $boots = "$module\::bootstrap"; goto &$boots if defined &$boots; goto retry; my @modparts = split(/::/,$module); my $modfname = $modparts[-1]; my $modpname = join('/',@modparts); my $modlibname = (caller())[1]; my $c = @modparts; $modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename my $file = "$modlibname/auto/$modpname/$modfname.$dl_dlext"; # print STDERR "XSLoader::load for $module ($file)\n" if $dl_debug; my $bs = $file; $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library if (-s $bs) { # only read file if it's not empty # print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug; eval { do $bs; }; warn "$bs: $@\n" if $@; } goto retry if not -f $file or -s $bs; my $bootname = "boot_$module"; $bootname =~ s/\W/_/g; @DynaLoader::dl_require_symbols = ($bootname); my $boot_symbol_ref; # Many dynamic extension loading problems will appear to come from # this section of code: XYZ failed at line 123 of DynaLoader.pm. # Often these errors are actually occurring in the initialisation # C code of the extension XS file. Perl reports the error as being # in this perl code simply because this was the last perl code # it executed. my $libref = dl_load_file($file, 0) or do { require Carp; Carp::croak("Can't load '$file' for module $module: " . dl_error()); }; push(@DynaLoader::dl_librefs,$libref); # record loaded object my @unresolved = dl_undef_symbols(); if (@unresolved) { require Carp; Carp::carp("Undefined symbols present after loading $file: @unresolved\n"); } $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do { require Carp; Carp::croak("Can't find '$bootname' symbol in $file\n"); }; push(@DynaLoader::dl_modules, $module); # record loaded module boot: my $xs = dl_install_xsub($boots, $boot_symbol_ref, $file); # See comment block above push(@DynaLoader::dl_shared_objects, $file); # record files loaded return &$xs(@_); retry: my $bootstrap_inherit = DynaLoader->can('bootstrap_inherit') || XSLoader->can('bootstrap_inherit'); goto &$bootstrap_inherit; } # Versions of DynaLoader prior to 5.6.0 don't have this function. sub bootstrap_inherit { package DynaLoader; my $module = $_[0]; local *DynaLoader::isa = *{"$module\::ISA"}; local @DynaLoader::isa = (@DynaLoader::isa, 'DynaLoader'); # Cannot goto due to delocalization. Will report errors on a wrong line? require DynaLoader; DynaLoader::bootstrap(@_); } 1; __END__ FILE'd3064b0e/auto/DynaLoader/dl_findfile.al #line 1 "/usr/lib/perl/5.10/auto/DynaLoader/dl_findfile.al" # NOTE: Derived from ../../lib/DynaLoader.pm. # Changes made here will be lost when autosplit is run again. # See AutoSplit.pm. package DynaLoader; #line 239 "../../lib/DynaLoader.pm (autosplit into ../../lib/auto/DynaLoader/dl_findfile.al)" sub dl_findfile { # Read ext/DynaLoader/DynaLoader.doc for detailed information. # This function does not automatically consider the architecture # or the perl library auto directories. my (@args) = @_; my (@dirs, $dir); # which directories to search my (@found); # full paths to real files we have found #my $dl_ext= 'so'; # $Config::Config{'dlext'} suffix for perl extensions #my $dl_so = 'so'; # $Config::Config{'so'} suffix for shared libraries print STDERR "dl_findfile(@args)\n" if $dl_debug; # accumulate directories but process files as they appear arg: foreach(@args) { # Special fast case: full filepath requires no search if (m:/: && -f $_) { push(@found,$_); last arg unless wantarray; next; } # Deal with directories first: # Using a -L prefix is the preferred option (faster and more robust) if (m:^-L:) { s/^-L//; push(@dirs, $_); next; } # Otherwise we try to try to spot directories by a heuristic # (this is a more complicated issue than it first appears) if (m:/: && -d $_) { push(@dirs, $_); next; } # Only files should get this far... my(@names, $name); # what filenames to look for if (m:-l: ) { # convert -lname to appropriate library name s/-l//; push(@names,"lib$_.$dl_so"); push(@names,"lib$_.a"); } else { # Umm, a bare name. Try various alternatives: # these should be ordered with the most likely first push(@names,"$_.$dl_dlext") unless m/\.$dl_dlext$/o; push(@names,"$_.$dl_so") unless m/\.$dl_so$/o; push(@names,"lib$_.$dl_so") unless m:/:; push(@names,"$_.a") if !m/\.a$/ and $dlsrc eq "dl_dld.xs"; push(@names, $_); } my $dirsep = '/'; foreach $dir (@dirs, @dl_library_path) { next unless -d $dir; foreach $name (@names) { my($file) = "$dir$dirsep$name"; print STDERR " checking in $dir for $name\n" if $dl_debug; $file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file); #$file = _check_file($file); if ($file) { push(@found, $file); next arg; # no need to look any further } } } } if ($dl_debug) { foreach(@dirs) { print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_; } print STDERR "dl_findfile found: @found\n"; } return $found[0] unless wantarray; @found; } # end of DynaLoader::dl_findfile 1; FILE96079d57/lib.pm _#line 1 "/usr/lib/perl/5.10/lib.pm" package lib; # THIS FILE IS AUTOMATICALLY GENERATED FROM lib_pm.PL. # ANY CHANGES TO THIS FILE WILL BE OVERWRITTEN BY THE NEXT PERL BUILD. use Config; use strict; my $archname = $Config{archname}; my $version = $Config{version}; my @inc_version_list = reverse split / /, $Config{inc_version_list}; our @ORIG_INC = @INC; # take a handy copy of 'original' value our $VERSION = '0.62'; my $Is_MacOS = $^O eq 'MacOS'; my $Mac_FS; if ($Is_MacOS) { require File::Spec; $Mac_FS = eval { require Mac::FileSpec::Unixish }; } sub import { shift; my %names; foreach (reverse @_) { my $path = $_; # we'll be modifying it, so break the alias if ($path eq '') { require Carp; Carp::carp("Empty compile time value given to use lib"); } $path = _nativize($path); if ($path !~ /\.par$/i && -e $path && ! -d _) { require Carp; Carp::carp("Parameter to use lib must be directory, not file"); } unshift(@INC, $path); # Add any previous version directories we found at configure time foreach my $incver (@inc_version_list) { my $dir = $Is_MacOS ? File::Spec->catdir( $path, $incver ) : "$path/$incver"; unshift(@INC, $dir) if -d $dir; } # Put a corresponding archlib directory in front of $path if it # looks like $path has an archlib directory below it. my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir) = _get_dirs($path); unshift(@INC, $arch_dir) if -d $arch_auto_dir; unshift(@INC, $version_dir) if -d $version_dir; unshift(@INC, $version_arch_dir) if -d $version_arch_dir; } # remove trailing duplicates @INC = grep { ++$names{$_} == 1 } @INC; return; } sub unimport { shift; my %names; foreach (@_) { my $path = _nativize($_); my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir) = _get_dirs($path); ++$names{$path}; ++$names{$arch_dir} if -d $arch_auto_dir; ++$names{$version_dir} if -d $version_dir; ++$names{$version_arch_dir} if -d $version_arch_dir; } # Remove ALL instances of each named directory. @INC = grep { !exists $names{$_} } @INC; return; } sub _get_dirs { my($dir) = @_; my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir); # we could use this for all platforms in the future, but leave it # Mac-only for now, until there is more time for testing it. if ($Is_MacOS) { $arch_auto_dir = File::Spec->catdir( $dir, $archname, 'auto' ); $arch_dir = File::Spec->catdir( $dir, $archname, ); $version_dir = File::Spec->catdir( $dir, $version ); $version_arch_dir = File::Spec->catdir( $dir, $version, $archname ); } else { $arch_auto_dir = "$dir/$archname/auto"; $arch_dir = "$dir/$archname"; $version_dir = "$dir/$version"; $version_arch_dir = "$dir/$version/$archname"; } return($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir); } sub _nativize { my($dir) = @_; if ($Is_MacOS && $Mac_FS && ! -d $dir) { $dir = Mac::FileSpec::Unixish::nativize($dir); $dir .= ":" unless $dir =~ /:$/; } return $dir; } 1; __END__ FILE1e51eeda/re.pmt#line 1 "/usr/lib/perl/5.10/re.pm" package re; # pragma for controlling the regex engine use strict; use warnings; our $VERSION = "0.09"; our @ISA = qw(Exporter); my @XS_FUNCTIONS = qw(regmust); my %XS_FUNCTIONS = map { $_ => 1 } @XS_FUNCTIONS; our @EXPORT_OK = (@XS_FUNCTIONS, qw(is_regexp regexp_pattern regname regnames regnames_count)); our %EXPORT_OK = map { $_ => 1 } @EXPORT_OK; # *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING *** # # If you modify these values see comment below! my %bitmask = ( taint => 0x00100000, # HINT_RE_TAINT eval => 0x00200000, # HINT_RE_EVAL ); # - File::Basename contains a literal for 'taint' as a fallback. If # taint is changed here, File::Basename must be updated as well. # # - ExtUtils::ParseXS uses a hardcoded # BEGIN { $^H |= 0x00200000 } # in it to allow re.xs to be built. So if 'eval' is changed here then # ExtUtils::ParseXS must be changed as well. # # *** WARNING *** WARNING *** WARNING *** WARNING *** WARNING *** sub setcolor { eval { # Ignore errors require Term::Cap; my $terminal = Tgetent Term::Cap ({OSPEED => 9600}); # Avoid warning. my $props = $ENV{PERL_RE_TC} || 'md,me,so,se,us,ue'; my @props = split /,/, $props; my $colors = join "\t", map {$terminal->Tputs($_,1)} @props; $colors =~ s/\0//g; $ENV{PERL_RE_COLORS} = $colors; }; if ($@) { $ENV{PERL_RE_COLORS} ||= qq'\t\t> <\t> <\t\t'; } } my %flags = ( COMPILE => 0x0000FF, PARSE => 0x000001, OPTIMISE => 0x000002, TRIEC => 0x000004, DUMP => 0x000008, FLAGS => 0x000010, EXECUTE => 0x00FF00, INTUIT => 0x000100, MATCH => 0x000200, TRIEE => 0x000400, EXTRA => 0xFF0000, TRIEM => 0x010000, OFFSETS => 0x020000, OFFSETSDBG => 0x040000, STATE => 0x080000, OPTIMISEM => 0x100000, STACK => 0x280000, BUFFERS => 0x400000, ); $flags{ALL} = -1 & ~($flags{OFFSETS}|$flags{OFFSETSDBG}|$flags{BUFFERS}); $flags{All} = $flags{all} = $flags{DUMP} | $flags{EXECUTE}; $flags{Extra} = $flags{EXECUTE} | $flags{COMPILE}; $flags{More} = $flags{MORE} = $flags{All} | $flags{TRIEC} | $flags{TRIEM} | $flags{STATE}; $flags{State} = $flags{DUMP} | $flags{EXECUTE} | $flags{STATE}; $flags{TRIE} = $flags{DUMP} | $flags{EXECUTE} | $flags{TRIEC}; my $installed; my $installed_error; sub _do_install { if ( ! defined($installed) ) { require XSLoader; $installed = eval { XSLoader::load('re', $VERSION) } || 0; $installed_error = $@; } } sub _load_unload { my ($on)= @_; if ($on) { _do_install(); if ( ! $installed ) { die "'re' not installed!? ($installed_error)"; } else { # We call install() every time, as if we didn't, we wouldn't # "see" any changes to the color environment var since # the last time it was called. # install() returns an integer, which if casted properly # in C resolves to a structure containing the regex # hooks. Setting it to a random integer will guarantee # segfaults. $^H{regcomp} = install(); } } else { delete $^H{regcomp}; } } sub bits { my $on = shift; my $bits = 0; unless (@_) { require Carp; Carp::carp("Useless use of \"re\" pragma"); } foreach my $idx (0..$#_){ my $s=$_[$idx]; if ($s eq 'Debug' or $s eq 'Debugcolor') { setcolor() if $s =~/color/i; ${^RE_DEBUG_FLAGS} = 0 unless defined ${^RE_DEBUG_FLAGS}; for my $idx ($idx+1..$#_) { if ($flags{$_[$idx]}) { if ($on) { ${^RE_DEBUG_FLAGS} |= $flags{$_[$idx]}; } else { ${^RE_DEBUG_FLAGS} &= ~ $flags{$_[$idx]}; } } else { require Carp; Carp::carp("Unknown \"re\" Debug flag '$_[$idx]', possible flags: ", join(", ",sort keys %flags ) ); } } _load_unload($on ? 1 : ${^RE_DEBUG_FLAGS}); last; } elsif ($s eq 'debug' or $s eq 'debugcolor') { setcolor() if $s =~/color/i; _load_unload($on); last; } elsif (exists $bitmask{$s}) { $bits |= $bitmask{$s}; } elsif ($XS_FUNCTIONS{$s}) { _do_install(); if (! $installed) { require Carp; Carp::croak("\"re\" function '$s' not available"); } require Exporter; re->export_to_level(2, 're', $s); } elsif ($EXPORT_OK{$s}) { require Exporter; re->export_to_level(2, 're', $s); } else { require Carp; Carp::carp("Unknown \"re\" subpragma '$s' (known ones are: ", join(', ', map {qq('$_')} 'debug', 'debugcolor', sort keys %bitmask), ")"); } } $bits; } sub import { shift; $^H |= bits(1, @_); } sub unimport { shift; $^H &= ~ bits(0, @_); } 1; __END__ FILEcd5d4997/Compress/Raw/Zlib.pm:#line 1 "/usr/local/lib/perl/5.10.1/Compress/Raw/Zlib.pm" package Compress::Raw::Zlib; require 5.004 ; require Exporter; use AutoLoader; use Carp ; #use Parse::Parameters; use strict ; use warnings ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD); $VERSION = '2.030'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @ISA = qw(Exporter); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw( adler32 crc32 ZLIB_VERSION ZLIB_VERNUM DEF_WBITS OS_CODE MAX_MEM_LEVEL MAX_WBITS Z_ASCII Z_BEST_COMPRESSION Z_BEST_SPEED Z_BINARY Z_BLOCK Z_BUF_ERROR Z_DATA_ERROR Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY Z_DEFLATED Z_ERRNO Z_FILTERED Z_FIXED Z_FINISH Z_FULL_FLUSH Z_HUFFMAN_ONLY Z_MEM_ERROR Z_NEED_DICT Z_NO_COMPRESSION Z_NO_FLUSH Z_NULL Z_OK Z_PARTIAL_FLUSH Z_RLE Z_STREAM_END Z_STREAM_ERROR Z_SYNC_FLUSH Z_TREES Z_UNKNOWN Z_VERSION_ERROR WANT_GZIP WANT_GZIP_OR_ZLIB ); use constant WANT_GZIP => 16; use constant WANT_GZIP_OR_ZLIB => 32; sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; my ($error, $val) = constant($constname); Carp::croak $error if $error; no strict 'refs'; *{$AUTOLOAD} = sub { $val }; goto &{$AUTOLOAD}; } use constant FLAG_APPEND => 1 ; use constant FLAG_CRC => 2 ; use constant FLAG_ADLER => 4 ; use constant FLAG_CONSUME_INPUT => 8 ; use constant FLAG_LIMIT_OUTPUT => 16 ; eval { require XSLoader; XSLoader::load('Compress::Raw::Zlib', $XS_VERSION); 1; } or do { require DynaLoader; local @ISA = qw(DynaLoader); bootstrap Compress::Raw::Zlib $XS_VERSION ; }; use constant Parse_any => 0x01; use constant Parse_unsigned => 0x02; use constant Parse_signed => 0x04; use constant Parse_boolean => 0x08; use constant Parse_string => 0x10; use constant Parse_custom => 0x12; use constant Parse_store_ref => 0x100 ; use constant OFF_PARSED => 0 ; use constant OFF_TYPE => 1 ; use constant OFF_DEFAULT => 2 ; use constant OFF_FIXED => 3 ; use constant OFF_FIRST_ONLY => 4 ; use constant OFF_STICKY => 5 ; sub ParseParameters { my $level = shift || 0 ; my $sub = (caller($level + 1))[3] ; #local $Carp::CarpLevel = 1 ; my $p = new Compress::Raw::Zlib::Parameters() ; $p->parse(@_) or croak "$sub: $p->{Error}" ; return $p; } sub Compress::Raw::Zlib::Parameters::new { my $class = shift ; my $obj = { Error => '', Got => {}, } ; #return bless $obj, ref($class) || $class || __PACKAGE__ ; return bless $obj, 'Compress::Raw::Zlib::Parameters' ; } sub Compress::Raw::Zlib::Parameters::setError { my $self = shift ; my $error = shift ; my $retval = @_ ? shift : undef ; $self->{Error} = $error ; return $retval; } #sub getError #{ # my $self = shift ; # return $self->{Error} ; #} sub Compress::Raw::Zlib::Parameters::parse { my $self = shift ; my $default = shift ; my $got = $self->{Got} ; my $firstTime = keys %{ $got } == 0 ; my (@Bad) ; my @entered = () ; # Allow the options to be passed as a hash reference or # as the complete hash. if (@_ == 0) { @entered = () ; } elsif (@_ == 1) { my $href = $_[0] ; return $self->setError("Expected even number of parameters, got 1") if ! defined $href or ! ref $href or ref $href ne "HASH" ; foreach my $key (keys %$href) { push @entered, $key ; push @entered, \$href->{$key} ; } } else { my $count = @_; return $self->setError("Expected even number of parameters, got $count") if $count % 2 != 0 ; for my $i (0.. $count / 2 - 1) { push @entered, $_[2* $i] ; push @entered, \$_[2* $i+1] ; } } while (my ($key, $v) = each %$default) { croak "need 4 params [@$v]" if @$v != 4 ; my ($first_only, $sticky, $type, $value) = @$v ; my $x ; $self->_checkType($key, \$value, $type, 0, \$x) or return undef ; $key = lc $key; if ($firstTime || ! $sticky) { $got->{$key} = [0, $type, $value, $x, $first_only, $sticky] ; } $got->{$key}[OFF_PARSED] = 0 ; } for my $i (0.. @entered / 2 - 1) { my $key = $entered[2* $i] ; my $value = $entered[2* $i+1] ; #print "Key [$key] Value [$value]" ; #print defined $$value ? "[$$value]\n" : "[undef]\n"; $key =~ s/^-// ; my $canonkey = lc $key; if ($got->{$canonkey} && ($firstTime || ! $got->{$canonkey}[OFF_FIRST_ONLY] )) { my $type = $got->{$canonkey}[OFF_TYPE] ; my $s ; $self->_checkType($key, $value, $type, 1, \$s) or return undef ; #$value = $$value unless $type & Parse_store_ref ; $value = $$value ; $got->{$canonkey} = [1, $type, $value, $s] ; } else { push (@Bad, $key) } } if (@Bad) { my ($bad) = join(", ", @Bad) ; return $self->setError("unknown key value(s) @Bad") ; } return 1; } sub Compress::Raw::Zlib::Parameters::_checkType { my $self = shift ; my $key = shift ; my $value = shift ; my $type = shift ; my $validate = shift ; my $output = shift; #local $Carp::CarpLevel = $level ; #print "PARSE $type $key $value $validate $sub\n" ; if ( $type & Parse_store_ref) { #$value = $$value # if ref ${ $value } ; $$output = $value ; return 1; } $value = $$value ; if ($type & Parse_any) { $$output = $value ; return 1; } elsif ($type & Parse_unsigned) { return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'") if $validate && ! defined $value ; return $self->setError("Parameter '$key' must be an unsigned int, got '$value'") if $validate && $value !~ /^\d+$/; $$output = defined $value ? $value : 0 ; return 1; } elsif ($type & Parse_signed) { return $self->setError("Parameter '$key' must be a signed int, got 'undef'") if $validate && ! defined $value ; return $self->setError("Parameter '$key' must be a signed int, got '$value'") if $validate && $value !~ /^-?\d+$/; $$output = defined $value ? $value : 0 ; return 1 ; } elsif ($type & Parse_boolean) { return $self->setError("Parameter '$key' must be an int, got '$value'") if $validate && defined $value && $value !~ /^\d*$/; $$output = defined $value ? $value != 0 : 0 ; return 1; } elsif ($type & Parse_string) { $$output = defined $value ? $value : "" ; return 1; } $$output = $value ; return 1; } sub Compress::Raw::Zlib::Parameters::parsed { my $self = shift ; my $name = shift ; return $self->{Got}{lc $name}[OFF_PARSED] ; } sub Compress::Raw::Zlib::Parameters::value { my $self = shift ; my $name = shift ; if (@_) { $self->{Got}{lc $name}[OFF_PARSED] = 1; $self->{Got}{lc $name}[OFF_DEFAULT] = $_[0] ; $self->{Got}{lc $name}[OFF_FIXED] = $_[0] ; } return $self->{Got}{lc $name}[OFF_FIXED] ; } sub Compress::Raw::Zlib::Deflate::new { my $pkg = shift ; my ($got) = ParseParameters(0, { 'AppendOutput' => [1, 1, Parse_boolean, 0], 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()], 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()], 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()], 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_) ; croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $flags = 0 ; $flags |= FLAG_APPEND if $got->value('AppendOutput') ; $flags |= FLAG_CRC if $got->value('CRC32') ; $flags |= FLAG_ADLER if $got->value('ADLER32') ; my $windowBits = $got->value('WindowBits'); $windowBits += MAX_WBITS() if ($windowBits & MAX_WBITS()) == 0 ; _deflateInit($flags, $got->value('Level'), $got->value('Method'), $windowBits, $got->value('MemLevel'), $got->value('Strategy'), $got->value('Bufsize'), $got->value('Dictionary')) ; } sub Compress::Raw::Zlib::Inflate::new { my $pkg = shift ; my ($got) = ParseParameters(0, { 'AppendOutput' => [1, 1, Parse_boolean, 0], 'LimitOutput' => [1, 1, Parse_boolean, 0], 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'ConsumeInput' => [1, 1, Parse_boolean, 1], 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_) ; croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $flags = 0 ; $flags |= FLAG_APPEND if $got->value('AppendOutput') ; $flags |= FLAG_CRC if $got->value('CRC32') ; $flags |= FLAG_ADLER if $got->value('ADLER32') ; $flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ; $flags |= FLAG_LIMIT_OUTPUT if $got->value('LimitOutput') ; my $windowBits = $got->value('WindowBits'); $windowBits += MAX_WBITS() if ($windowBits & MAX_WBITS()) == 0 ; _inflateInit($flags, $windowBits, $got->value('Bufsize'), $got->value('Dictionary')) ; } sub Compress::Raw::Zlib::InflateScan::new { my $pkg = shift ; my ($got) = ParseParameters(0, { 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'WindowBits' => [1, 1, Parse_signed, -MAX_WBITS()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_) ; croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $flags = 0 ; #$flags |= FLAG_APPEND if $got->value('AppendOutput') ; $flags |= FLAG_CRC if $got->value('CRC32') ; $flags |= FLAG_ADLER if $got->value('ADLER32') ; #$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ; _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'), '') ; } sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream { my $pkg = shift ; my ($got) = ParseParameters(0, { 'AppendOutput' => [1, 1, Parse_boolean, 0], 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()], 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()], 'WindowBits' => [1, 1, Parse_signed, - MAX_WBITS()], 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()], 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()], }, @_) ; croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $flags = 0 ; $flags |= FLAG_APPEND if $got->value('AppendOutput') ; $flags |= FLAG_CRC if $got->value('CRC32') ; $flags |= FLAG_ADLER if $got->value('ADLER32') ; $pkg->_createDeflateStream($flags, $got->value('Level'), $got->value('Method'), $got->value('WindowBits'), $got->value('MemLevel'), $got->value('Strategy'), $got->value('Bufsize'), ) ; } sub Compress::Raw::Zlib::inflateScanStream::inflate { my $self = shift ; my $buffer = $_[1]; my $eof = $_[2]; my $status = $self->scan(@_); if ($status == Z_OK() && $_[2]) { my $byte = ' '; $status = $self->scan(\$byte, $_[1]) ; } return $status ; } sub Compress::Raw::Zlib::deflateStream::deflateParams { my $self = shift ; my ($got) = ParseParameters(0, { 'Level' => [1, 1, Parse_signed, undef], 'Strategy' => [1, 1, Parse_unsigned, undef], 'Bufsize' => [1, 1, Parse_unsigned, undef], }, @_) ; croak "Compress::Raw::Zlib::deflateParams needs Level and/or Strategy" unless $got->parsed('Level') + $got->parsed('Strategy') + $got->parsed('Bufsize'); croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " . $got->value('Bufsize') if $got->parsed('Bufsize') && $got->value('Bufsize') <= 1; my $flags = 0; $flags |= 1 if $got->parsed('Level') ; $flags |= 2 if $got->parsed('Strategy') ; $flags |= 4 if $got->parsed('Bufsize') ; $self->_deflateParams($flags, $got->value('Level'), $got->value('Strategy'), $got->value('Bufsize')); } # Autoload methods go after __END__, and are processed by the autosplit program. 1; __END__ #line 1421 FILEb8fb5655/Cwd.pmB#line 1 "/usr/local/lib/perl/5.10.1/Cwd.pm" package Cwd; #line 169 use strict; use Exporter; use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); $VERSION = '3.33'; my $xs_version = $VERSION; $VERSION = eval $VERSION; @ISA = qw/ Exporter /; @EXPORT = qw(cwd getcwd fastcwd fastgetcwd); push @EXPORT, qw(getdcwd) if $^O eq 'MSWin32'; @EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath); # sys_cwd may keep the builtin command # All the functionality of this module may provided by builtins, # there is no sense to process the rest of the file. # The best choice may be to have this in BEGIN, but how to return from BEGIN? if ($^O eq 'os2') { local $^W = 0; *cwd = defined &sys_cwd ? \&sys_cwd : \&_os2_cwd; *getcwd = \&cwd; *fastgetcwd = \&cwd; *fastcwd = \&cwd; *fast_abs_path = \&sys_abspath if defined &sys_abspath; *abs_path = \&fast_abs_path; *realpath = \&fast_abs_path; *fast_realpath = \&fast_abs_path; return 1; } # Need to look up the feature settings on VMS. The preferred way is to use the # VMS::Feature module, but that may not be available to dual life modules. my $use_vms_feature; BEGIN { if ($^O eq 'VMS') { if (eval { local $SIG{__DIE__}; require VMS::Feature; }) { $use_vms_feature = 1; } } } # Need to look up the UNIX report mode. This may become a dynamic mode # in the future. sub _vms_unix_rpt { my $unix_rpt; if ($use_vms_feature) { $unix_rpt = VMS::Feature::current("filename_unix_report"); } else { my $env_unix_rpt = $ENV{'DECC$FILENAME_UNIX_REPORT'} || ''; $unix_rpt = $env_unix_rpt =~ /^[ET1]/i; } return $unix_rpt; } # Need to look up the EFS character set mode. This may become a dynamic # mode in the future. sub _vms_efs { my $efs; if ($use_vms_feature) { $efs = VMS::Feature::current("efs_charset"); } else { my $env_efs = $ENV{'DECC$EFS_CHARSET'} || ''; $efs = $env_efs =~ /^[ET1]/i; } return $efs; } # If loading the XS stuff doesn't work, we can fall back to pure perl eval { if ( $] >= 5.006 ) { require XSLoader; XSLoader::load( __PACKAGE__, $xs_version); } else { require DynaLoader; push @ISA, 'DynaLoader'; __PACKAGE__->bootstrap( $xs_version ); } }; # Must be after the DynaLoader stuff: $VERSION = eval $VERSION; # Big nasty table of function aliases my %METHOD_MAP = ( VMS => { cwd => '_vms_cwd', getcwd => '_vms_cwd', fastcwd => '_vms_cwd', fastgetcwd => '_vms_cwd', abs_path => '_vms_abs_path', fast_abs_path => '_vms_abs_path', }, MSWin32 => { # We assume that &_NT_cwd is defined as an XSUB or in the core. cwd => '_NT_cwd', getcwd => '_NT_cwd', fastcwd => '_NT_cwd', fastgetcwd => '_NT_cwd', abs_path => 'fast_abs_path', realpath => 'fast_abs_path', }, dos => { cwd => '_dos_cwd', getcwd => '_dos_cwd', fastgetcwd => '_dos_cwd', fastcwd => '_dos_cwd', abs_path => 'fast_abs_path', }, # QNX4. QNX6 has a $os of 'nto'. qnx => { cwd => '_qnx_cwd', getcwd => '_qnx_cwd', fastgetcwd => '_qnx_cwd', fastcwd => '_qnx_cwd', abs_path => '_qnx_abs_path', fast_abs_path => '_qnx_abs_path', }, cygwin => { getcwd => 'cwd', fastgetcwd => 'cwd', fastcwd => 'cwd', abs_path => 'fast_abs_path', realpath => 'fast_abs_path', }, epoc => { cwd => '_epoc_cwd', getcwd => '_epoc_cwd', fastgetcwd => '_epoc_cwd', fastcwd => '_epoc_cwd', abs_path => 'fast_abs_path', }, MacOS => { getcwd => 'cwd', fastgetcwd => 'cwd', fastcwd => 'cwd', abs_path => 'fast_abs_path', }, ); $METHOD_MAP{NT} = $METHOD_MAP{MSWin32}; # Find the pwd command in the expected locations. We assume these # are safe. This prevents _backtick_pwd() consulting $ENV{PATH} # so everything works under taint mode. my $pwd_cmd; foreach my $try ('/bin/pwd', '/usr/bin/pwd', '/QOpenSys/bin/pwd', # OS/400 PASE. ) { if( -x $try ) { $pwd_cmd = $try; last; } } my $found_pwd_cmd = defined($pwd_cmd); unless ($pwd_cmd) { # Isn't this wrong? _backtick_pwd() will fail if somenone has # pwd in their path but it is not /bin/pwd or /usr/bin/pwd? # See [perl #16774]. --jhi $pwd_cmd = 'pwd'; } # Lazy-load Carp sub _carp { require Carp; Carp::carp(@_) } sub _croak { require Carp; Carp::croak(@_) } # The 'natural and safe form' for UNIX (pwd may be setuid root) sub _backtick_pwd { # Localize %ENV entries in a way that won't create new hash keys my @localize = grep exists $ENV{$_}, qw(PATH IFS CDPATH ENV BASH_ENV); local @ENV{@localize}; my $cwd = `$pwd_cmd`; # Belt-and-suspenders in case someone said "undef $/". local $/ = "\n"; # `pwd` may fail e.g. if the disk is full chomp($cwd) if defined $cwd; $cwd; } # Since some ports may predefine cwd internally (e.g., NT) # we take care not to override an existing definition for cwd(). unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) { # The pwd command is not available in some chroot(2)'ed environments my $sep = $Config::Config{path_sep} || ':'; my $os = $^O; # Protect $^O from tainting # Try again to find a pwd, this time searching the whole PATH. if (defined $ENV{PATH} and $os ne 'MSWin32') { # no pwd on Windows my @candidates = split($sep, $ENV{PATH}); while (!$found_pwd_cmd and @candidates) { my $candidate = shift @candidates; $found_pwd_cmd = 1 if -x "$candidate/pwd"; } } # MacOS has some special magic to make `pwd` work. if( $os eq 'MacOS' || $found_pwd_cmd ) { *cwd = \&_backtick_pwd; } else { *cwd = \&getcwd; } } if ($^O eq 'cygwin') { # We need to make sure cwd() is called with no args, because it's # got an arg-less prototype and will die if args are present. local $^W = 0; my $orig_cwd = \&cwd; *cwd = sub { &$orig_cwd() } } # set a reasonable (and very safe) default for fastgetcwd, in case it # isn't redefined later (20001212 rspier) *fastgetcwd = \&cwd; # A non-XS version of getcwd() - also used to bootstrap the perl build # process, when miniperl is running and no XS loading happens. sub _perl_getcwd { abs_path('.'); } # By John Bazik # # Usage: $cwd = &fastcwd; # # This is a faster version of getcwd. It's also more dangerous because # you might chdir out of a directory that you can't chdir back into. sub fastcwd_ { my($odev, $oino, $cdev, $cino, $tdev, $tino); my(@path, $path); local(*DIR); my($orig_cdev, $orig_cino) = stat('.'); ($cdev, $cino) = ($orig_cdev, $orig_cino); for (;;) { my $direntry; ($odev, $oino) = ($cdev, $cino); CORE::chdir('..') || return undef; ($cdev, $cino) = stat('.'); last if $odev == $cdev && $oino == $cino; opendir(DIR, '.') || return undef; for (;;) { $direntry = readdir(DIR); last unless defined $direntry; next if $direntry eq '.'; next if $direntry eq '..'; ($tdev, $tino) = lstat($direntry); last unless $tdev != $odev || $tino != $oino; } closedir(DIR); return undef unless defined $direntry; # should never happen unshift(@path, $direntry); } $path = '/' . join('/', @path); if ($^O eq 'apollo') { $path = "/".$path; } # At this point $path may be tainted (if tainting) and chdir would fail. # Untaint it then check that we landed where we started. $path =~ /^(.*)\z/s # untaint && CORE::chdir($1) or return undef; ($cdev, $cino) = stat('.'); die "Unstable directory path, current directory changed unexpectedly" if $cdev != $orig_cdev || $cino != $orig_cino; $path; } if (not defined &fastcwd) { *fastcwd = \&fastcwd_ } # Keeps track of current working directory in PWD environment var # Usage: # use Cwd 'chdir'; # chdir $newdir; my $chdir_init = 0; sub chdir_init { if ($ENV{'PWD'} and $^O ne 'os2' and $^O ne 'dos' and $^O ne 'MSWin32') { my($dd,$di) = stat('.'); my($pd,$pi) = stat($ENV{'PWD'}); if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) { $ENV{'PWD'} = cwd(); } } else { my $wd = cwd(); $wd = Win32::GetFullPathName($wd) if $^O eq 'MSWin32'; $ENV{'PWD'} = $wd; } # Strip an automounter prefix (where /tmp_mnt/foo/bar == /foo/bar) if ($^O ne 'MSWin32' and $ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|s) { my($pd,$pi) = stat($2); my($dd,$di) = stat($1); if (defined $pd and defined $dd and $di == $pi and $dd == $pd) { $ENV{'PWD'}="$2$3"; } } $chdir_init = 1; } sub chdir { my $newdir = @_ ? shift : ''; # allow for no arg (chdir to HOME dir) $newdir =~ s|///*|/|g unless $^O eq 'MSWin32'; chdir_init() unless $chdir_init; my $newpwd; if ($^O eq 'MSWin32') { # get the full path name *before* the chdir() $newpwd = Win32::GetFullPathName($newdir); } return 0 unless CORE::chdir $newdir; if ($^O eq 'VMS') { return $ENV{'PWD'} = $ENV{'DEFAULT'} } elsif ($^O eq 'MacOS') { return $ENV{'PWD'} = cwd(); } elsif ($^O eq 'MSWin32') { $ENV{'PWD'} = $newpwd; return 1; } if (ref $newdir eq 'GLOB') { # in case a file/dir handle is passed in $ENV{'PWD'} = cwd(); } elsif ($newdir =~ m#^/#s) { $ENV{'PWD'} = $newdir; } else { my @curdir = split(m#/#,$ENV{'PWD'}); @curdir = ('') unless @curdir; my $component; foreach $component (split(m#/#, $newdir)) { next if $component eq '.'; pop(@curdir),next if $component eq '..'; push(@curdir,$component); } $ENV{'PWD'} = join('/',@curdir) || '/'; } 1; } sub _perl_abs_path { my $start = @_ ? shift : '.'; my($dotdots, $cwd, @pst, @cst, $dir, @tst); unless (@cst = stat( $start )) { _carp("stat($start): $!"); return ''; } unless (-d _) { # Make sure we can be invoked on plain files, not just directories. # NOTE that this routine assumes that '/' is the only directory separator. my ($dir, $file) = $start =~ m{^(.*)/(.+)$} or return cwd() . '/' . $start; # Can't use "-l _" here, because the previous stat was a stat(), not an lstat(). if (-l $start) { my $link_target = readlink($start); die "Can't resolve link $start: $!" unless defined $link_target; require File::Spec; $link_target = $dir . '/' . $link_target unless File::Spec->file_name_is_absolute($link_target); return abs_path($link_target); } return $dir ? abs_path($dir) . "/$file" : "/$file"; } $cwd = ''; $dotdots = $start; do { $dotdots .= '/..'; @pst = @cst; local *PARENT; unless (opendir(PARENT, $dotdots)) { # probably a permissions issue. Try the native command. return File::Spec->rel2abs( $start, _backtick_pwd() ); } unless (@cst = stat($dotdots)) { _carp("stat($dotdots): $!"); closedir(PARENT); return ''; } if ($pst[0] == $cst[0] && $pst[1] == $cst[1]) { $dir = undef; } else { do { unless (defined ($dir = readdir(PARENT))) { _carp("readdir($dotdots): $!"); closedir(PARENT); return ''; } $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir")) } while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] || $tst[1] != $pst[1]); } $cwd = (defined $dir ? "$dir" : "" ) . "/$cwd" ; closedir(PARENT); } while (defined $dir); chop($cwd) unless $cwd eq '/'; # drop the trailing / $cwd; } my $Curdir; sub fast_abs_path { local $ENV{PWD} = $ENV{PWD} || ''; # Guard against clobberage my $cwd = getcwd(); require File::Spec; my $path = @_ ? shift : ($Curdir ||= File::Spec->curdir); # Detaint else we'll explode in taint mode. This is safe because # we're not doing anything dangerous with it. ($path) = $path =~ /(.*)/; ($cwd) = $cwd =~ /(.*)/; unless (-e $path) { _croak("$path: No such file or directory"); } unless (-d _) { # Make sure we can be invoked on plain files, not just directories. my ($vol, $dir, $file) = File::Spec->splitpath($path); return File::Spec->catfile($cwd, $path) unless length $dir; if (-l $path) { my $link_target = readlink($path); die "Can't resolve link $path: $!" unless defined $link_target; $link_target = File::Spec->catpath($vol, $dir, $link_target) unless File::Spec->file_name_is_absolute($link_target); return fast_abs_path($link_target); } return $dir eq File::Spec->rootdir ? File::Spec->catpath($vol, $dir, $file) : fast_abs_path(File::Spec->catpath($vol, $dir, '')) . '/' . $file; } if (!CORE::chdir($path)) { _croak("Cannot chdir to $path: $!"); } my $realpath = getcwd(); if (! ((-d $cwd) && (CORE::chdir($cwd)))) { _croak("Cannot chdir back to $cwd: $!"); } $realpath; } # added function alias to follow principle of least surprise # based on previous aliasing. --tchrist 27-Jan-00 *fast_realpath = \&fast_abs_path; # --- PORTING SECTION --- # VMS: $ENV{'DEFAULT'} points to default directory at all times # 06-Mar-1996 Charles Bailey bailey@newman.upenn.edu # Note: Use of Cwd::chdir() causes the logical name PWD to be defined # in the process logical name table as the default device and directory # seen by Perl. This may not be the same as the default device # and directory seen by DCL after Perl exits, since the effects # the CRTL chdir() function persist only until Perl exits. sub _vms_cwd { return $ENV{'DEFAULT'}; } sub _vms_abs_path { return $ENV{'DEFAULT'} unless @_; my $path = shift; my $efs = _vms_efs; my $unix_rpt = _vms_unix_rpt; if (defined &VMS::Filespec::vmsrealpath) { my $path_unix = 0; my $path_vms = 0; $path_unix = 1 if ($path =~ m#(?<=\^)/#); $path_unix = 1 if ($path =~ /^\.\.?$/); $path_vms = 1 if ($path =~ m#[\[<\]]#); $path_vms = 1 if ($path =~ /^--?$/); my $unix_mode = $path_unix; if ($efs) { # In case of a tie, the Unix report mode decides. if ($path_vms == $path_unix) { $unix_mode = $unix_rpt; } else { $unix_mode = 0 if $path_vms; } } if ($unix_mode) { # Unix format return VMS::Filespec::unixrealpath($path); } # VMS format my $new_path = VMS::Filespec::vmsrealpath($path); # Perl expects directories to be in directory format $new_path = VMS::Filespec::pathify($new_path) if -d $path; return $new_path; } # Fallback to older algorithm if correct ones are not # available. if (-l $path) { my $link_target = readlink($path); die "Can't resolve link $path: $!" unless defined $link_target; return _vms_abs_path($link_target); } # may need to turn foo.dir into [.foo] my $pathified = VMS::Filespec::pathify($path); $path = $pathified if defined $pathified; return VMS::Filespec::rmsexpand($path); } sub _os2_cwd { $ENV{'PWD'} = `cmd /c cd`; chomp $ENV{'PWD'}; $ENV{'PWD'} =~ s:\\:/:g ; return $ENV{'PWD'}; } sub _win32_cwd { if (eval 'defined &DynaLoader::boot_DynaLoader') { $ENV{'PWD'} = Win32::GetCwd(); } else { # miniperl chomp($ENV{'PWD'} = `cd`); } $ENV{'PWD'} =~ s:\\:/:g ; return $ENV{'PWD'}; } *_NT_cwd = defined &Win32::GetCwd ? \&_win32_cwd : \&_os2_cwd; sub _dos_cwd { if (!defined &Dos::GetCwd) { $ENV{'PWD'} = `command /c cd`; chomp $ENV{'PWD'}; $ENV{'PWD'} =~ s:\\:/:g ; } else { $ENV{'PWD'} = Dos::GetCwd(); } return $ENV{'PWD'}; } sub _qnx_cwd { local $ENV{PATH} = ''; local $ENV{CDPATH} = ''; local $ENV{ENV} = ''; $ENV{'PWD'} = `/usr/bin/fullpath -t`; chomp $ENV{'PWD'}; return $ENV{'PWD'}; } sub _qnx_abs_path { local $ENV{PATH} = ''; local $ENV{CDPATH} = ''; local $ENV{ENV} = ''; my $path = @_ ? shift : '.'; local *REALPATH; defined( open(REALPATH, '-|') || exec '/usr/bin/fullpath', '-t', $path ) or die "Can't open /usr/bin/fullpath: $!"; my $realpath = ; close REALPATH; chomp $realpath; return $realpath; } sub _epoc_cwd { $ENV{'PWD'} = EPOC::getcwd(); return $ENV{'PWD'}; } # Now that all the base-level functions are set up, alias the # user-level functions to the right places if (exists $METHOD_MAP{$^O}) { my $map = $METHOD_MAP{$^O}; foreach my $name (keys %$map) { local $^W = 0; # assignments trigger 'subroutine redefined' warning no strict 'refs'; *{$name} = \&{$map->{$name}}; } } # In case the XS version doesn't load. *abs_path = \&_perl_abs_path unless defined &abs_path; *getcwd = \&_perl_getcwd unless defined &getcwd; # added function alias for those of us more # used to the libc function. --tchrist 27-Jan-00 *realpath = \&abs_path; 1; FILE503ec695/File/Spec.pm#line 1 "/usr/local/lib/perl/5.10.1/File/Spec.pm" package File::Spec; use strict; use vars qw(@ISA $VERSION); $VERSION = '3.33'; $VERSION = eval $VERSION; my %module = (MacOS => 'Mac', MSWin32 => 'Win32', os2 => 'OS2', VMS => 'VMS', epoc => 'Epoc', NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare. symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian. dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP. cygwin => 'Cygwin'); my $module = $module{$^O} || 'Unix'; require "File/Spec/$module.pm"; @ISA = ("File::Spec::$module"); 1; __END__ #line 338 FILE0fb04f1c/File/Spec/Unix.pm`#line 1 "/usr/local/lib/perl/5.10.1/File/Spec/Unix.pm" package File::Spec::Unix; use strict; use vars qw($VERSION); $VERSION = '3.33'; $VERSION = eval $VERSION; #line 42 sub canonpath { my ($self,$path) = @_; return unless defined $path; # Handle POSIX-style node names beginning with double slash (qnx, nto) # (POSIX says: "a pathname that begins with two successive slashes # may be interpreted in an implementation-defined manner, although # more than two leading slashes shall be treated as a single slash.") my $node = ''; my $double_slashes_special = $^O eq 'qnx' || $^O eq 'nto'; if ( $double_slashes_special && ( $path =~ s{^(//[^/]+)/?\z}{}s || $path =~ s{^(//[^/]+)/}{/}s ) ) { $node = $1; } # This used to be # $path =~ s|/+|/|g unless ($^O eq 'cygwin'); # but that made tests 29, 30, 35, 46, and 213 (as of #13272) to fail # (Mainly because trailing "" directories didn't get stripped). # Why would cygwin avoid collapsing multiple slashes into one? --jhi $path =~ s|/{2,}|/|g; # xx////xx -> xx/xx $path =~ s{(?:/\.)+(?:/|\z)}{/}g; # xx/././xx -> xx/xx $path =~ s|^(?:\./)+||s unless $path eq "./"; # ./xx -> xx $path =~ s|^/(?:\.\./)+|/|; # /../../xx -> xx $path =~ s|^/\.\.$|/|; # /.. -> / $path =~ s|/\z|| unless $path eq "/"; # xx/ -> xx return "$node$path"; } #line 82 sub catdir { my $self = shift; $self->canonpath(join('/', @_, '')); # '' because need a trailing '/' } #line 95 sub catfile { my $self = shift; my $file = $self->canonpath(pop @_); return $file unless @_; my $dir = $self->catdir(@_); $dir .= "/" unless substr($dir,-1) eq "/"; return $dir.$file; } #line 110 sub curdir { '.' } #line 118 sub devnull { '/dev/null' } #line 126 sub rootdir { '/' } #line 142 my $tmpdir; sub _tmpdir { return $tmpdir if defined $tmpdir; my $self = shift; my @dirlist = @_; { no strict 'refs'; if (${"\cTAINT"}) { # Check for taint mode on perl >= 5.8.0 require Scalar::Util; @dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist; } } foreach (@dirlist) { next unless defined && -d && -w _; $tmpdir = $_; last; } $tmpdir = $self->curdir unless defined $tmpdir; $tmpdir = defined $tmpdir && $self->canonpath($tmpdir); return $tmpdir; } sub tmpdir { return $tmpdir if defined $tmpdir; $tmpdir = $_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp" ); } #line 175 sub updir { '..' } #line 184 sub no_upwards { my $self = shift; return grep(!/^\.{1,2}\z/s, @_); } #line 196 sub case_tolerant { 0 } #line 208 sub file_name_is_absolute { my ($self,$file) = @_; return scalar($file =~ m:^/:s); } #line 219 sub path { return () unless exists $ENV{PATH}; my @path = split(':', $ENV{PATH}); foreach (@path) { $_ = '.' if $_ eq '' } return @path; } #line 232 sub join { my $self = shift; return $self->catfile(@_); } #line 257 sub splitpath { my ($self,$path, $nofile) = @_; my ($volume,$directory,$file) = ('','',''); if ( $nofile ) { $directory = $path; } else { $path =~ m|^ ( (?: .* / (?: \.\.?\z )? )? ) ([^/]*) |xs; $directory = $1; $file = $2; } return ($volume,$directory,$file); } #line 299 sub splitdir { return split m|/|, $_[1], -1; # Preserve trailing fields } #line 313 sub catpath { my ($self,$volume,$directory,$file) = @_; if ( $directory ne '' && $file ne '' && substr( $directory, -1 ) ne '/' && substr( $file, 0, 1 ) ne '/' ) { $directory .= "/$file" ; } else { $directory .= $file ; } return $directory ; } #line 358 sub abs2rel { my($self,$path,$base) = @_; $base = $self->_cwd() unless defined $base and length $base; ($path, $base) = map $self->canonpath($_), $path, $base; if (grep $self->file_name_is_absolute($_), $path, $base) { ($path, $base) = map $self->rel2abs($_), $path, $base; } else { # save a couple of cwd()s if both paths are relative ($path, $base) = map $self->catdir('/', $_), $path, $base; } my ($path_volume) = $self->splitpath($path, 1); my ($base_volume) = $self->splitpath($base, 1); # Can't relativize across volumes return $path unless $path_volume eq $base_volume; my $path_directories = ($self->splitpath($path, 1))[1]; my $base_directories = ($self->splitpath($base, 1))[1]; # For UNC paths, the user might give a volume like //foo/bar that # strictly speaking has no directory portion. Treat it as if it # had the root directory for that volume. if (!length($base_directories) and $self->file_name_is_absolute($base)) { $base_directories = $self->rootdir; } # Now, remove all leading components that are the same my @pathchunks = $self->splitdir( $path_directories ); my @basechunks = $self->splitdir( $base_directories ); if ($base_directories eq $self->rootdir) { shift @pathchunks; return $self->canonpath( $self->catpath('', $self->catdir( @pathchunks ), '') ); } while (@pathchunks && @basechunks && $self->_same($pathchunks[0], $basechunks[0])) { shift @pathchunks ; shift @basechunks ; } return $self->curdir unless @pathchunks || @basechunks; # $base now contains the directories the resulting relative path # must ascend out of before it can descend to $path_directory. my $result_dirs = $self->catdir( ($self->updir) x @basechunks, @pathchunks ); return $self->canonpath( $self->catpath('', $result_dirs, '') ); } sub _same { $_[1] eq $_[2]; } #line 439 sub rel2abs { my ($self,$path,$base ) = @_; # Clean up $path if ( ! $self->file_name_is_absolute( $path ) ) { # Figure out the effective $base and clean it up. if ( !defined( $base ) || $base eq '' ) { $base = $self->_cwd(); } elsif ( ! $self->file_name_is_absolute( $base ) ) { $base = $self->rel2abs( $base ) ; } else { $base = $self->canonpath( $base ) ; } # Glom them together $path = $self->catdir( $base, $path ) ; } return $self->canonpath( $path ) ; } #line 477 # Internal routine to File::Spec, no point in making this public since # it is the standard Cwd interface. Most of the platform-specific # File::Spec subclasses use this. sub _cwd { require Cwd; Cwd::getcwd(); } # Internal method to reduce xx\..\yy -> yy sub _collapse { my($fs, $path) = @_; my $updir = $fs->updir; my $curdir = $fs->curdir; my($vol, $dirs, $file) = $fs->splitpath($path); my @dirs = $fs->splitdir($dirs); pop @dirs if @dirs && $dirs[-1] eq ''; my @collapsed; foreach my $dir (@dirs) { if( $dir eq $updir and # if we have an updir @collapsed and # and something to collapse length $collapsed[-1] and # and its not the rootdir $collapsed[-1] ne $updir and # nor another updir $collapsed[-1] ne $curdir # nor the curdir ) { # then pop @collapsed; # collapse } else { # else push @collapsed, $dir; # just hang onto it } } return $fs->catpath($vol, $fs->catdir(@collapsed), $file ); } 1; FILE47bb21d8/List/Util.pmg#line 1 "/usr/local/lib/perl/5.10.1/List/Util.pm" # List::Util.pm # # Copyright (c) 1997-2009 Graham Barr . All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # This module is normally only loaded if the XS module is not available package List::Util; use strict; use vars qw(@ISA @EXPORT_OK $VERSION $XS_VERSION $TESTING_PERL_ONLY); require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(first min max minstr maxstr reduce sum shuffle); $VERSION = "1.23"; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; eval { # PERL_DL_NONLAZY must be false, or any errors in loading will just # cause the perl code to be tested local $ENV{PERL_DL_NONLAZY} = 0 if $ENV{PERL_DL_NONLAZY}; eval { require XSLoader; XSLoader::load('List::Util', $XS_VERSION); 1; } or do { require DynaLoader; local @ISA = qw(DynaLoader); bootstrap List::Util $XS_VERSION; }; } unless $TESTING_PERL_ONLY; if (!defined &sum) { require List::Util::PP; List::Util::PP->import; } 1; __END__ #line 234 FILEe42389e4/Scalar/Util.pm#line 1 "/usr/local/lib/perl/5.10.1/Scalar/Util.pm" # Scalar::Util.pm # # Copyright (c) 1997-2007 Graham Barr . All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. package Scalar::Util; use strict; use vars qw(@ISA @EXPORT_OK $VERSION @EXPORT_FAIL); require Exporter; require List::Util; # List::Util loads the XS @ISA = qw(Exporter); @EXPORT_OK = qw(blessed dualvar reftype weaken isweak tainted readonly openhandle refaddr isvstring looks_like_number set_prototype); $VERSION = "1.23"; $VERSION = eval $VERSION; unless (defined &dualvar) { # Load Pure Perl version if XS not loaded require Scalar::Util::PP; Scalar::Util::PP->import; push @EXPORT_FAIL, qw(weaken isweak dualvar isvstring set_prototype); } sub export_fail { if (grep { /dualvar/ } @EXPORT_FAIL) { # no XS loaded my $pat = join("|", @EXPORT_FAIL); if (my ($err) = grep { /^($pat)$/ } @_ ) { require Carp; Carp::croak("$err is only available with the XS version of Scalar::Util"); } } if (grep { /^(weaken|isweak)$/ } @_ ) { require Carp; Carp::croak("Weak references are not implemented in the version of perl"); } if (grep { /^(isvstring)$/ } @_ ) { require Carp; Carp::croak("Vstrings are not implemented in the version of perl"); } @_; } sub openhandle ($) { my $fh = shift; my $rt = reftype($fh) || ''; return defined(fileno($fh)) ? $fh : undef if $rt eq 'IO'; if (reftype(\$fh) eq 'GLOB') { # handle openhandle(*DATA) $fh = \(my $tmp=$fh); } elsif ($rt ne 'GLOB') { return undef; } (tied(*$fh) or defined(fileno($fh))) ? $fh : undef; } 1; __END__ #line 284 FILE,de3174d9/auto/Compress/Raw/Zlib/autosplit.ix#line 1 "/usr/local/lib/perl/5.10.1/auto/Compress/Raw/Zlib/autosplit.ix" # Index created by AutoSplit for blib/lib/Compress/Raw/Zlib.pm # (file acts as timestamp) 1; FILE120d58cb/Archive/Zip.pmC*#line 1 "/usr/local/share/perl/5.10.1/Archive/Zip.pm" package Archive::Zip; use strict; BEGIN { require 5.003_96; } use UNIVERSAL (); use Carp (); use Cwd (); use IO::File (); use IO::Seekable (); use Compress::Raw::Zlib (); use File::Spec (); use File::Temp (); use FileHandle (); use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; require Exporter; @ISA = qw( Exporter ); } use vars qw( $ChunkSize $ErrorHandler ); BEGIN { # This is the size we'll try to read, write, and (de)compress. # You could set it to something different if you had lots of memory # and needed more speed. $ChunkSize ||= 32768; $ErrorHandler = \&Carp::carp; } # BEGIN block is necessary here so that other modules can use the constants. use vars qw( @EXPORT_OK %EXPORT_TAGS ); BEGIN { @EXPORT_OK = ('computeCRC32'); %EXPORT_TAGS = ( CONSTANTS => [ qw( FA_MSDOS FA_UNIX GPBF_ENCRYPTED_MASK GPBF_DEFLATING_COMPRESSION_MASK GPBF_HAS_DATA_DESCRIPTOR_MASK COMPRESSION_STORED COMPRESSION_DEFLATED COMPRESSION_LEVEL_NONE COMPRESSION_LEVEL_DEFAULT COMPRESSION_LEVEL_FASTEST COMPRESSION_LEVEL_BEST_COMPRESSION IFA_TEXT_FILE_MASK IFA_TEXT_FILE IFA_BINARY_FILE ) ], MISC_CONSTANTS => [ qw( FA_AMIGA FA_VAX_VMS FA_VM_CMS FA_ATARI_ST FA_OS2_HPFS FA_MACINTOSH FA_Z_SYSTEM FA_CPM FA_TOPS20 FA_WINDOWS_NTFS FA_QDOS FA_ACORN FA_VFAT FA_MVS FA_BEOS FA_TANDEM FA_THEOS GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK GPBF_IS_COMPRESSED_PATCHED_DATA_MASK COMPRESSION_SHRUNK DEFLATING_COMPRESSION_NORMAL DEFLATING_COMPRESSION_MAXIMUM DEFLATING_COMPRESSION_FAST DEFLATING_COMPRESSION_SUPER_FAST COMPRESSION_REDUCED_1 COMPRESSION_REDUCED_2 COMPRESSION_REDUCED_3 COMPRESSION_REDUCED_4 COMPRESSION_IMPLODED COMPRESSION_TOKENIZED COMPRESSION_DEFLATED_ENHANCED COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED ) ], ERROR_CODES => [ qw( AZ_OK AZ_STREAM_END AZ_ERROR AZ_FORMAT_ERROR AZ_IO_ERROR ) ], # For Internal Use Only PKZIP_CONSTANTS => [ qw( SIGNATURE_FORMAT SIGNATURE_LENGTH LOCAL_FILE_HEADER_SIGNATURE LOCAL_FILE_HEADER_FORMAT LOCAL_FILE_HEADER_LENGTH CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE DATA_DESCRIPTOR_FORMAT DATA_DESCRIPTOR_LENGTH DATA_DESCRIPTOR_SIGNATURE DATA_DESCRIPTOR_FORMAT_NO_SIG DATA_DESCRIPTOR_LENGTH_NO_SIG CENTRAL_DIRECTORY_FILE_HEADER_FORMAT CENTRAL_DIRECTORY_FILE_HEADER_LENGTH END_OF_CENTRAL_DIRECTORY_SIGNATURE END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING END_OF_CENTRAL_DIRECTORY_FORMAT END_OF_CENTRAL_DIRECTORY_LENGTH ) ], # For Internal Use Only UTILITY_METHODS => [ qw( _error _printError _ioError _formatError _subclassResponsibility _binmode _isSeekable _newFileHandle _readSignature _asZipDirName ) ], ); # Add all the constant names and error code names to @EXPORT_OK Exporter::export_ok_tags( qw( CONSTANTS ERROR_CODES PKZIP_CONSTANTS UTILITY_METHODS MISC_CONSTANTS ) ); } # Error codes use constant AZ_OK => 0; use constant AZ_STREAM_END => 1; use constant AZ_ERROR => 2; use constant AZ_FORMAT_ERROR => 3; use constant AZ_IO_ERROR => 4; # File types # Values of Archive::Zip::Member->fileAttributeFormat() use constant FA_MSDOS => 0; use constant FA_AMIGA => 1; use constant FA_VAX_VMS => 2; use constant FA_UNIX => 3; use constant FA_VM_CMS => 4; use constant FA_ATARI_ST => 5; use constant FA_OS2_HPFS => 6; use constant FA_MACINTOSH => 7; use constant FA_Z_SYSTEM => 8; use constant FA_CPM => 9; use constant FA_TOPS20 => 10; use constant FA_WINDOWS_NTFS => 11; use constant FA_QDOS => 12; use constant FA_ACORN => 13; use constant FA_VFAT => 14; use constant FA_MVS => 15; use constant FA_BEOS => 16; use constant FA_TANDEM => 17; use constant FA_THEOS => 18; # general-purpose bit flag masks # Found in Archive::Zip::Member->bitFlag() use constant GPBF_ENCRYPTED_MASK => 1 << 0; use constant GPBF_DEFLATING_COMPRESSION_MASK => 3 << 1; use constant GPBF_HAS_DATA_DESCRIPTOR_MASK => 1 << 3; # deflating compression types, if compressionMethod == COMPRESSION_DEFLATED # ( Archive::Zip::Member->bitFlag() & GPBF_DEFLATING_COMPRESSION_MASK ) use constant DEFLATING_COMPRESSION_NORMAL => 0 << 1; use constant DEFLATING_COMPRESSION_MAXIMUM => 1 << 1; use constant DEFLATING_COMPRESSION_FAST => 2 << 1; use constant DEFLATING_COMPRESSION_SUPER_FAST => 3 << 1; # compression method # these two are the only ones supported in this module use constant COMPRESSION_STORED => 0; # file is stored (no compression) use constant COMPRESSION_DEFLATED => 8; # file is Deflated use constant COMPRESSION_LEVEL_NONE => 0; use constant COMPRESSION_LEVEL_DEFAULT => -1; use constant COMPRESSION_LEVEL_FASTEST => 1; use constant COMPRESSION_LEVEL_BEST_COMPRESSION => 9; # internal file attribute bits # Found in Archive::Zip::Member::internalFileAttributes() use constant IFA_TEXT_FILE_MASK => 1; use constant IFA_TEXT_FILE => 1; use constant IFA_BINARY_FILE => 0; # PKZIP file format miscellaneous constants (for internal use only) use constant SIGNATURE_FORMAT => "V"; use constant SIGNATURE_LENGTH => 4; # these lengths are without the signature. use constant LOCAL_FILE_HEADER_SIGNATURE => 0x04034b50; use constant LOCAL_FILE_HEADER_FORMAT => "v3 V4 v2"; use constant LOCAL_FILE_HEADER_LENGTH => 26; # PKZIP docs don't mention the signature, but Info-Zip writes it. use constant DATA_DESCRIPTOR_SIGNATURE => 0x08074b50; use constant DATA_DESCRIPTOR_FORMAT => "V3"; use constant DATA_DESCRIPTOR_LENGTH => 12; # but the signature is apparently optional. use constant DATA_DESCRIPTOR_FORMAT_NO_SIG => "V2"; use constant DATA_DESCRIPTOR_LENGTH_NO_SIG => 8; use constant CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE => 0x02014b50; use constant CENTRAL_DIRECTORY_FILE_HEADER_FORMAT => "C2 v3 V4 v5 V2"; use constant CENTRAL_DIRECTORY_FILE_HEADER_LENGTH => 42; use constant END_OF_CENTRAL_DIRECTORY_SIGNATURE => 0x06054b50; use constant END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING => pack( "V", END_OF_CENTRAL_DIRECTORY_SIGNATURE ); use constant END_OF_CENTRAL_DIRECTORY_FORMAT => "v4 V2 v"; use constant END_OF_CENTRAL_DIRECTORY_LENGTH => 18; use constant GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK => 1 << 1; use constant GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK => 1 << 2; use constant GPBF_IS_COMPRESSED_PATCHED_DATA_MASK => 1 << 5; # the rest of these are not supported in this module use constant COMPRESSION_SHRUNK => 1; # file is Shrunk use constant COMPRESSION_REDUCED_1 => 2; # file is Reduced CF=1 use constant COMPRESSION_REDUCED_2 => 3; # file is Reduced CF=2 use constant COMPRESSION_REDUCED_3 => 4; # file is Reduced CF=3 use constant COMPRESSION_REDUCED_4 => 5; # file is Reduced CF=4 use constant COMPRESSION_IMPLODED => 6; # file is Imploded use constant COMPRESSION_TOKENIZED => 7; # reserved for Tokenizing compr. use constant COMPRESSION_DEFLATED_ENHANCED => 9; # reserved for enh. Deflating use constant COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED => 10; # Load the various required classes require Archive::Zip::Archive; require Archive::Zip::Member; require Archive::Zip::FileMember; require Archive::Zip::DirectoryMember; require Archive::Zip::ZipFileMember; require Archive::Zip::NewFileMember; require Archive::Zip::StringMember; use constant ZIPARCHIVECLASS => 'Archive::Zip::Archive'; use constant ZIPMEMBERCLASS => 'Archive::Zip::Member'; # Convenience functions sub _ISA ($$) { # Can't rely on Scalar::Util, so use the next best way local $@; !! eval { ref $_[0] and $_[0]->isa($_[1]) }; } sub _CAN ($$) { local $@; !! eval { ref $_[0] and $_[0]->can($_[1]) }; } ##################################################################### # Methods sub new { my $class = shift; return $class->ZIPARCHIVECLASS->new(@_); } sub computeCRC32 { my ( $data, $crc ); if ( ref( $_[0] ) eq 'HASH' ) { $data = $_[0]->{string}; $crc = $_[0]->{checksum}; } else { $data = shift; $data = shift if ref($data); $crc = shift; } return Compress::Raw::Zlib::crc32( $data, $crc ); } # Report or change chunk size used for reading and writing. # Also sets Zlib's default buffer size (eventually). sub setChunkSize { shift if ref( $_[0] ) eq 'Archive::Zip::Archive'; my $chunkSize = ( ref( $_[0] ) eq 'HASH' ) ? shift->{chunkSize} : shift; my $oldChunkSize = $Archive::Zip::ChunkSize; $Archive::Zip::ChunkSize = $chunkSize if ($chunkSize); return $oldChunkSize; } sub chunkSize { return $Archive::Zip::ChunkSize; } sub setErrorHandler { my $errorHandler = ( ref( $_[0] ) eq 'HASH' ) ? shift->{subroutine} : shift; $errorHandler = \&Carp::carp unless defined($errorHandler); my $oldErrorHandler = $Archive::Zip::ErrorHandler; $Archive::Zip::ErrorHandler = $errorHandler; return $oldErrorHandler; } ###################################################################### # Private utility functions (not methods). sub _printError { my $string = join ( ' ', @_, "\n" ); my $oldCarpLevel = $Carp::CarpLevel; $Carp::CarpLevel += 2; &{$ErrorHandler} ($string); $Carp::CarpLevel = $oldCarpLevel; } # This is called on format errors. sub _formatError { shift if ref( $_[0] ); _printError( 'format error:', @_ ); return AZ_FORMAT_ERROR; } # This is called on IO errors. sub _ioError { shift if ref( $_[0] ); _printError( 'IO error:', @_, ':', $! ); return AZ_IO_ERROR; } # This is called on generic errors. sub _error { shift if ref( $_[0] ); _printError( 'error:', @_ ); return AZ_ERROR; } # Called when a subclass should have implemented # something but didn't sub _subclassResponsibility { Carp::croak("subclass Responsibility\n"); } # Try to set the given file handle or object into binary mode. sub _binmode { my $fh = shift; return _CAN( $fh, 'binmode' ) ? $fh->binmode() : binmode($fh); } # Attempt to guess whether file handle is seekable. # Because of problems with Windows, this only returns true when # the file handle is a real file. sub _isSeekable { my $fh = shift; return 0 unless ref $fh; if ( _ISA($fh, 'IO::Scalar') ) { # IO::Scalar objects are brokenly-seekable return 0; } if ( _ISA($fh, 'IO::String') ) { return 1; } if ( _ISA($fh, 'IO::Seekable') ) { # Unfortunately, some things like FileHandle objects # return true for Seekable, but AREN'T!!!!! if ( _ISA($fh, 'FileHandle') ) { return 0; } else { return 1; } } if ( _CAN($fh, 'stat') ) { return -f $fh; } return ( _CAN($fh, 'seek') and _CAN($fh, 'tell') ) ? 1 : 0; } # Print to the filehandle, while making sure the pesky Perl special global # variables don't interfere. sub _print { my ($self, $fh, @data) = @_; local $\; return $fh->print(@data); } # Return an opened IO::Handle # my ( $status, fh ) = _newFileHandle( 'fileName', 'w' ); # Can take a filename, file handle, or ref to GLOB # Or, if given something that is a ref but not an IO::Handle, # passes back the same thing. sub _newFileHandle { my $fd = shift; my $status = 1; my $handle; if ( ref($fd) ) { if ( _ISA($fd, 'IO::Scalar') or _ISA($fd, 'IO::String') ) { $handle = $fd; } elsif ( _ISA($fd, 'IO::Handle') or ref($fd) eq 'GLOB' ) { $handle = IO::File->new; $status = $handle->fdopen( $fd, @_ ); } else { $handle = $fd; } } else { $handle = IO::File->new; $status = $handle->open( $fd, @_ ); } return ( $status, $handle ); } # Returns next signature from given file handle, leaves # file handle positioned afterwards. # In list context, returns ($status, $signature) # ( $status, $signature) = _readSignature( $fh, $fileName ); sub _readSignature { my $fh = shift; my $fileName = shift; my $expectedSignature = shift; # optional my $signatureData; my $bytesRead = $fh->read( $signatureData, SIGNATURE_LENGTH ); if ( $bytesRead != SIGNATURE_LENGTH ) { return _ioError("reading header signature"); } my $signature = unpack( SIGNATURE_FORMAT, $signatureData ); my $status = AZ_OK; # compare with expected signature, if any, or any known signature. if ( ( defined($expectedSignature) && $signature != $expectedSignature ) || ( !defined($expectedSignature) && $signature != CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE && $signature != LOCAL_FILE_HEADER_SIGNATURE && $signature != END_OF_CENTRAL_DIRECTORY_SIGNATURE && $signature != DATA_DESCRIPTOR_SIGNATURE ) ) { my $errmsg = sprintf( "bad signature: 0x%08x", $signature ); if ( _isSeekable($fh) ) { $errmsg .= sprintf( " at offset %d", $fh->tell() - SIGNATURE_LENGTH ); } $status = _formatError("$errmsg in file $fileName"); } return ( $status, $signature ); } # Utility method to make and open a temp file. # Will create $temp_dir if it doesn't exist. # Returns file handle and name: # # my ($fh, $name) = Archive::Zip::tempFile(); # my ($fh, $name) = Archive::Zip::tempFile('mytempdir'); # sub tempFile { my $dir = ( ref( $_[0] ) eq 'HASH' ) ? shift->{tempDir} : shift; my ( $fh, $filename ) = File::Temp::tempfile( SUFFIX => '.zip', UNLINK => 0, # we will delete it! $dir ? ( DIR => $dir ) : () ); return ( undef, undef ) unless $fh; my ( $status, $newfh ) = _newFileHandle( $fh, 'w+' ); return ( $newfh, $filename ); } # Return the normalized directory name as used in a zip file (path # separators become slashes, etc.). # Will translate internal slashes in path components (i.e. on Macs) to # underscores. Discards volume names. # When $forceDir is set, returns paths with trailing slashes (or arrays # with trailing blank members). # # If third argument is a reference, returns volume information there. # # input output # . ('.') '.' # ./a ('a') a # ./a/b ('a','b') a/b # ./a/b/ ('a','b') a/b # a/b/ ('a','b') a/b # /a/b/ ('','a','b') /a/b # c:\a\b\c.doc ('','a','b','c.doc') /a/b/c.doc # on Windoze # "i/o maps:whatever" ('i_o maps', 'whatever') "i_o maps/whatever" # on Macs sub _asZipDirName { my $name = shift; my $forceDir = shift; my $volReturn = shift; my ( $volume, $directories, $file ) = File::Spec->splitpath( File::Spec->canonpath($name), $forceDir ); $$volReturn = $volume if ( ref($volReturn) ); my @dirs = map { $_ =~ s{/}{_}g; $_ } File::Spec->splitdir($directories); if ( @dirs > 0 ) { pop (@dirs) unless $dirs[-1] } # remove empty component push ( @dirs, defined($file) ? $file : '' ); #return wantarray ? @dirs : join ( '/', @dirs ); return join ( '/', @dirs ); } # Return an absolute local name for a zip name. # Assume a directory if zip name has trailing slash. # Takes an optional volume name in FS format (like 'a:'). # sub _asLocalName { my $name = shift; # zip format my $volume = shift; $volume = '' unless defined($volume); # local FS format my @paths = split ( /\//, $name ); my $filename = pop (@paths); $filename = '' unless defined($filename); my $localDirs = @paths ? File::Spec->catdir(@paths) : ''; my $localName = File::Spec->catpath( $volume, $localDirs, $filename ); unless ( $volume ) { $localName = File::Spec->rel2abs( $localName, Cwd::getcwd() ); } return $localName; } 1; __END__ #line 2060 FILE3b4cc6d8/Archive/Zip/Archive.pms#line 1 "/usr/local/share/perl/5.10.1/Archive/Zip/Archive.pm" package Archive::Zip::Archive; # Represents a generic ZIP archive use strict; use File::Path; use File::Find (); use File::Spec (); use File::Copy (); use File::Basename; use Cwd; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw( Archive::Zip ); } use Archive::Zip qw( :CONSTANTS :ERROR_CODES :PKZIP_CONSTANTS :UTILITY_METHODS ); # Note that this returns undef on read errors, else new zip object. sub new { my $class = shift; my $self = bless( { 'diskNumber' => 0, 'diskNumberWithStartOfCentralDirectory' => 0, 'numberOfCentralDirectoriesOnThisDisk' => 0, # shld be # of members 'numberOfCentralDirectories' => 0, # shld be # of members 'centralDirectorySize' => 0, # must re-compute on write 'centralDirectoryOffsetWRTStartingDiskNumber' => 0, # must re-compute 'writeEOCDOffset' => 0, 'writeCentralDirectoryOffset' => 0, 'zipfileComment' => '', 'eocdOffset' => 0, 'fileName' => '' }, $class ); $self->{'members'} = []; my $fileName = ( ref( $_[0] ) eq 'HASH' ) ? shift->{filename} : shift; if ($fileName) { my $status = $self->read($fileName); return $status == AZ_OK ? $self : undef; } return $self; } sub storeSymbolicLink { my $self = shift; $self->{'storeSymbolicLink'} = shift; } sub members { @{ shift->{'members'} }; } sub numberOfMembers { scalar( shift->members() ); } sub memberNames { my $self = shift; return map { $_->fileName() } $self->members(); } # return ref to member with given name or undef sub memberNamed { my $self = shift; my $fileName = ( ref( $_[0] ) eq 'HASH' ) ? shift->{zipName} : shift; foreach my $member ( $self->members() ) { return $member if $member->fileName() eq $fileName; } return undef; } sub membersMatching { my $self = shift; my $pattern = ( ref( $_[0] ) eq 'HASH' ) ? shift->{regex} : shift; return grep { $_->fileName() =~ /$pattern/ } $self->members(); } sub diskNumber { shift->{'diskNumber'}; } sub diskNumberWithStartOfCentralDirectory { shift->{'diskNumberWithStartOfCentralDirectory'}; } sub numberOfCentralDirectoriesOnThisDisk { shift->{'numberOfCentralDirectoriesOnThisDisk'}; } sub numberOfCentralDirectories { shift->{'numberOfCentralDirectories'}; } sub centralDirectorySize { shift->{'centralDirectorySize'}; } sub centralDirectoryOffsetWRTStartingDiskNumber { shift->{'centralDirectoryOffsetWRTStartingDiskNumber'}; } sub zipfileComment { my $self = shift; my $comment = $self->{'zipfileComment'}; if (@_) { my $new_comment = ( ref( $_[0] ) eq 'HASH' ) ? shift->{comment} : shift; $self->{'zipfileComment'} = pack( 'C0a*', $new_comment ); # avoid unicode } return $comment; } sub eocdOffset { shift->{'eocdOffset'}; } # Return the name of the file last read. sub fileName { shift->{'fileName'}; } sub removeMember { my $self = shift; my $member = ( ref( $_[0] ) eq 'HASH' ) ? shift->{memberOrZipName} : shift; $member = $self->memberNamed($member) unless ref($member); return undef unless $member; my @newMembers = grep { $_ != $member } $self->members(); $self->{'members'} = \@newMembers; return $member; } sub replaceMember { my $self = shift; my ( $oldMember, $newMember ); if ( ref( $_[0] ) eq 'HASH' ) { $oldMember = $_[0]->{memberOrZipName}; $newMember = $_[0]->{newMember}; } else { ( $oldMember, $newMember ) = @_; } $oldMember = $self->memberNamed($oldMember) unless ref($oldMember); return undef unless $oldMember; return undef unless $newMember; my @newMembers = map { ( $_ == $oldMember ) ? $newMember : $_ } $self->members(); $self->{'members'} = \@newMembers; return $oldMember; } sub extractMember { my $self = shift; my ( $member, $name ); if ( ref( $_[0] ) eq 'HASH' ) { $member = $_[0]->{memberOrZipName}; $name = $_[0]->{name}; } else { ( $member, $name ) = @_; } $member = $self->memberNamed($member) unless ref($member); return _error('member not found') unless $member; my $originalSize = $member->compressedSize(); my ( $volumeName, $dirName, $fileName ); if ( defined($name) ) { ( $volumeName, $dirName, $fileName ) = File::Spec->splitpath($name); $dirName = File::Spec->catpath( $volumeName, $dirName, '' ); } else { $name = $member->fileName(); ( $dirName = $name ) =~ s{[^/]*$}{}; $dirName = Archive::Zip::_asLocalName($dirName); $name = Archive::Zip::_asLocalName($name); } if ( $dirName && !-d $dirName ) { mkpath($dirName); return _ioError("can't create dir $dirName") if ( !-d $dirName ); } my $rc = $member->extractToFileNamed( $name, @_ ); # TODO refactor this fix into extractToFileNamed() $member->{'compressedSize'} = $originalSize; return $rc; } sub extractMemberWithoutPaths { my $self = shift; my ( $member, $name ); if ( ref( $_[0] ) eq 'HASH' ) { $member = $_[0]->{memberOrZipName}; $name = $_[0]->{name}; } else { ( $member, $name ) = @_; } $member = $self->memberNamed($member) unless ref($member); return _error('member not found') unless $member; my $originalSize = $member->compressedSize(); return AZ_OK if $member->isDirectory(); unless ($name) { $name = $member->fileName(); $name =~ s{.*/}{}; # strip off directories, if any $name = Archive::Zip::_asLocalName($name); } my $rc = $member->extractToFileNamed( $name, @_ ); $member->{'compressedSize'} = $originalSize; return $rc; } sub addMember { my $self = shift; my $newMember = ( ref( $_[0] ) eq 'HASH' ) ? shift->{member} : shift; push( @{ $self->{'members'} }, $newMember ) if $newMember; return $newMember; } sub addFile { my $self = shift; my ( $fileName, $newName, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $fileName = $_[0]->{filename}; $newName = $_[0]->{zipName}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $fileName, $newName, $compressionLevel ) = @_; } my $newMember = $self->ZIPMEMBERCLASS->newFromFile( $fileName, $newName ); $newMember->desiredCompressionLevel($compressionLevel); if ( $self->{'storeSymbolicLink'} && -l $fileName ) { my $newMember = $self->ZIPMEMBERCLASS->newFromString(readlink $fileName, $newName); # For symbolic links, External File Attribute is set to 0xA1FF0000 by Info-ZIP $newMember->{'externalFileAttributes'} = 0xA1FF0000; $self->addMember($newMember); } else { $self->addMember($newMember); } return $newMember; } sub addString { my $self = shift; my ( $stringOrStringRef, $name, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $stringOrStringRef = $_[0]->{string}; $name = $_[0]->{zipName}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $stringOrStringRef, $name, $compressionLevel ) = @_;; } my $newMember = $self->ZIPMEMBERCLASS->newFromString( $stringOrStringRef, $name ); $newMember->desiredCompressionLevel($compressionLevel); return $self->addMember($newMember); } sub addDirectory { my $self = shift; my ( $name, $newName ); if ( ref( $_[0] ) eq 'HASH' ) { $name = $_[0]->{directoryName}; $newName = $_[0]->{zipName}; } else { ( $name, $newName ) = @_; } my $newMember = $self->ZIPMEMBERCLASS->newDirectoryNamed( $name, $newName ); if ( $self->{'storeSymbolicLink'} && -l $name ) { my $link = readlink $name; ( $newName =~ s{/$}{} ) if $newName; # Strip trailing / my $newMember = $self->ZIPMEMBERCLASS->newFromString($link, $newName); # For symbolic links, External File Attribute is set to 0xA1FF0000 by Info-ZIP $newMember->{'externalFileAttributes'} = 0xA1FF0000; $self->addMember($newMember); } else { $self->addMember($newMember); } return $newMember; } # add either a file or a directory. sub addFileOrDirectory { my $self = shift; my ( $name, $newName, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $name = $_[0]->{name}; $newName = $_[0]->{zipName}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $name, $newName, $compressionLevel ) = @_; } $name =~ s{/$}{}; if ( $newName ) { $newName =~ s{/$}{}; } else { $newName = $name; } if ( -f $name ) { return $self->addFile( $name, $newName, $compressionLevel ); } elsif ( -d $name ) { return $self->addDirectory( $name, $newName ); } else { return _error("$name is neither a file nor a directory"); } } sub contents { my $self = shift; my ( $member, $newContents ); if ( ref( $_[0] ) eq 'HASH' ) { $member = $_[0]->{memberOrZipName}; $newContents = $_[0]->{contents}; } else { ( $member, $newContents ) = @_; } return _error('No member name given') unless $member; $member = $self->memberNamed($member) unless ref($member); return undef unless $member; return $member->contents($newContents); } sub writeToFileNamed { my $self = shift; my $fileName = ( ref( $_[0] ) eq 'HASH' ) ? shift->{filename} : shift; # local FS format foreach my $member ( $self->members() ) { if ( $member->_usesFileNamed($fileName) ) { return _error( "$fileName is needed by member " . $member->fileName() . "; consider using overwrite() or overwriteAs() instead." ); } } my ( $status, $fh ) = _newFileHandle( $fileName, 'w' ); return _ioError("Can't open $fileName for write") unless $status; my $retval = $self->writeToFileHandle( $fh, 1 ); $fh->close(); $fh = undef; return $retval; } # It is possible to write data to the FH before calling this, # perhaps to make a self-extracting archive. sub writeToFileHandle { my $self = shift; my ( $fh, $fhIsSeekable ); if ( ref( $_[0] ) eq 'HASH' ) { $fh = $_[0]->{fileHandle}; $fhIsSeekable = exists( $_[0]->{seek} ) ? $_[0]->{seek} : _isSeekable($fh); } else { $fh = shift; $fhIsSeekable = @_ ? shift : _isSeekable($fh); } return _error('No filehandle given') unless $fh; return _ioError('filehandle not open') unless $fh->opened(); _binmode($fh); # Find out where the current position is. my $offset = $fhIsSeekable ? $fh->tell() : 0; $offset = 0 if $offset < 0; foreach my $member ( $self->members() ) { my $retval = $member->_writeToFileHandle( $fh, $fhIsSeekable, $offset ); $member->endRead(); return $retval if $retval != AZ_OK; $offset += $member->_localHeaderSize() + $member->_writeOffset(); $offset += $member->hasDataDescriptor() ? DATA_DESCRIPTOR_LENGTH + SIGNATURE_LENGTH : 0; # changed this so it reflects the last successful position $self->{'writeCentralDirectoryOffset'} = $offset; } return $self->writeCentralDirectory($fh); } # Write zip back to the original file, # as safely as possible. # Returns AZ_OK if successful. sub overwrite { my $self = shift; return $self->overwriteAs( $self->{'fileName'} ); } # Write zip to the specified file, # as safely as possible. # Returns AZ_OK if successful. sub overwriteAs { my $self = shift; my $zipName = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{filename} : shift; return _error("no filename in overwriteAs()") unless defined($zipName); my ( $fh, $tempName ) = Archive::Zip::tempFile(); return _error( "Can't open temp file", $! ) unless $fh; ( my $backupName = $zipName ) =~ s{(\.[^.]*)?$}{.zbk}; my $status = $self->writeToFileHandle($fh); $fh->close(); $fh = undef; if ( $status != AZ_OK ) { unlink($tempName); _printError("Can't write to $tempName"); return $status; } my $err; # rename the zip if ( -f $zipName && !rename( $zipName, $backupName ) ) { $err = $!; unlink($tempName); return _error( "Can't rename $zipName as $backupName", $err ); } # move the temp to the original name (possibly copying) unless ( File::Copy::move( $tempName, $zipName ) ) { $err = $!; rename( $backupName, $zipName ); unlink($tempName); return _error( "Can't move $tempName to $zipName", $err ); } # unlink the backup if ( -f $backupName && !unlink($backupName) ) { $err = $!; return _error( "Can't unlink $backupName", $err ); } return AZ_OK; } # Used only during writing sub _writeCentralDirectoryOffset { shift->{'writeCentralDirectoryOffset'}; } sub _writeEOCDOffset { shift->{'writeEOCDOffset'}; } # Expects to have _writeEOCDOffset() set sub _writeEndOfCentralDirectory { my ( $self, $fh ) = @_; $self->_print($fh, END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING) or return _ioError('writing EOCD Signature'); my $zipfileCommentLength = length( $self->zipfileComment() ); my $header = pack( END_OF_CENTRAL_DIRECTORY_FORMAT, 0, # {'diskNumber'}, 0, # {'diskNumberWithStartOfCentralDirectory'}, $self->numberOfMembers(), # {'numberOfCentralDirectoriesOnThisDisk'}, $self->numberOfMembers(), # {'numberOfCentralDirectories'}, $self->_writeEOCDOffset() - $self->_writeCentralDirectoryOffset(), $self->_writeCentralDirectoryOffset(), $zipfileCommentLength ); $self->_print($fh, $header) or return _ioError('writing EOCD header'); if ($zipfileCommentLength) { $self->_print($fh, $self->zipfileComment() ) or return _ioError('writing zipfile comment'); } return AZ_OK; } # $offset can be specified to truncate a zip file. sub writeCentralDirectory { my $self = shift; my ( $fh, $offset ); if ( ref( $_[0] ) eq 'HASH' ) { $fh = $_[0]->{fileHandle}; $offset = $_[0]->{offset}; } else { ( $fh, $offset ) = @_; } if ( defined($offset) ) { $self->{'writeCentralDirectoryOffset'} = $offset; $fh->seek( $offset, IO::Seekable::SEEK_SET ) or return _ioError('seeking to write central directory'); } else { $offset = $self->_writeCentralDirectoryOffset(); } foreach my $member ( $self->members() ) { my $status = $member->_writeCentralDirectoryFileHeader($fh); return $status if $status != AZ_OK; $offset += $member->_centralDirectoryHeaderSize(); $self->{'writeEOCDOffset'} = $offset; } return $self->_writeEndOfCentralDirectory($fh); } sub read { my $self = shift; my $fileName = ( ref( $_[0] ) eq 'HASH' ) ? shift->{filename} : shift; return _error('No filename given') unless $fileName; my ( $status, $fh ) = _newFileHandle( $fileName, 'r' ); return _ioError("opening $fileName for read") unless $status; $status = $self->readFromFileHandle( $fh, $fileName ); return $status if $status != AZ_OK; $fh->close(); $self->{'fileName'} = $fileName; return AZ_OK; } sub readFromFileHandle { my $self = shift; my ( $fh, $fileName ); if ( ref( $_[0] ) eq 'HASH' ) { $fh = $_[0]->{fileHandle}; $fileName = $_[0]->{filename}; } else { ( $fh, $fileName ) = @_; } $fileName = $fh unless defined($fileName); return _error('No filehandle given') unless $fh; return _ioError('filehandle not open') unless $fh->opened(); _binmode($fh); $self->{'fileName'} = "$fh"; # TODO: how to support non-seekable zips? return _error('file not seekable') unless _isSeekable($fh); $fh->seek( 0, 0 ); # rewind the file my $status = $self->_findEndOfCentralDirectory($fh); return $status if $status != AZ_OK; my $eocdPosition = $fh->tell(); $status = $self->_readEndOfCentralDirectory($fh); return $status if $status != AZ_OK; $fh->seek( $eocdPosition - $self->centralDirectorySize(), IO::Seekable::SEEK_SET ) or return _ioError("Can't seek $fileName"); # Try to detect garbage at beginning of archives # This should be 0 $self->{'eocdOffset'} = $eocdPosition - $self->centralDirectorySize() # here - $self->centralDirectoryOffsetWRTStartingDiskNumber(); for ( ; ; ) { my $newMember = $self->ZIPMEMBERCLASS->_newFromZipFile( $fh, $fileName, $self->eocdOffset() ); my $signature; ( $status, $signature ) = _readSignature( $fh, $fileName ); return $status if $status != AZ_OK; last if $signature == END_OF_CENTRAL_DIRECTORY_SIGNATURE; $status = $newMember->_readCentralDirectoryFileHeader(); return $status if $status != AZ_OK; $status = $newMember->endRead(); return $status if $status != AZ_OK; $newMember->_becomeDirectoryIfNecessary(); push( @{ $self->{'members'} }, $newMember ); } return AZ_OK; } # Read EOCD, starting from position before signature. # Return AZ_OK on success. sub _readEndOfCentralDirectory { my $self = shift; my $fh = shift; # Skip past signature $fh->seek( SIGNATURE_LENGTH, IO::Seekable::SEEK_CUR ) or return _ioError("Can't seek past EOCD signature"); my $header = ''; my $bytesRead = $fh->read( $header, END_OF_CENTRAL_DIRECTORY_LENGTH ); if ( $bytesRead != END_OF_CENTRAL_DIRECTORY_LENGTH ) { return _ioError("reading end of central directory"); } my $zipfileCommentLength; ( $self->{'diskNumber'}, $self->{'diskNumberWithStartOfCentralDirectory'}, $self->{'numberOfCentralDirectoriesOnThisDisk'}, $self->{'numberOfCentralDirectories'}, $self->{'centralDirectorySize'}, $self->{'centralDirectoryOffsetWRTStartingDiskNumber'}, $zipfileCommentLength ) = unpack( END_OF_CENTRAL_DIRECTORY_FORMAT, $header ); if ($zipfileCommentLength) { my $zipfileComment = ''; $bytesRead = $fh->read( $zipfileComment, $zipfileCommentLength ); if ( $bytesRead != $zipfileCommentLength ) { return _ioError("reading zipfile comment"); } $self->{'zipfileComment'} = $zipfileComment; } return AZ_OK; } # Seek in my file to the end, then read backwards until we find the # signature of the central directory record. Leave the file positioned right # before the signature. Returns AZ_OK if success. sub _findEndOfCentralDirectory { my $self = shift; my $fh = shift; my $data = ''; $fh->seek( 0, IO::Seekable::SEEK_END ) or return _ioError("seeking to end"); my $fileLength = $fh->tell(); if ( $fileLength < END_OF_CENTRAL_DIRECTORY_LENGTH + 4 ) { return _formatError("file is too short"); } my $seekOffset = 0; my $pos = -1; for ( ; ; ) { $seekOffset += 512; $seekOffset = $fileLength if ( $seekOffset > $fileLength ); $fh->seek( -$seekOffset, IO::Seekable::SEEK_END ) or return _ioError("seek failed"); my $bytesRead = $fh->read( $data, $seekOffset ); if ( $bytesRead != $seekOffset ) { return _ioError("read failed"); } $pos = rindex( $data, END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING ); last if ( $pos >= 0 or $seekOffset == $fileLength or $seekOffset >= $Archive::Zip::ChunkSize ); } if ( $pos >= 0 ) { $fh->seek( $pos - $seekOffset, IO::Seekable::SEEK_CUR ) or return _ioError("seeking to EOCD"); return AZ_OK; } else { return _formatError("can't find EOCD signature"); } } # Used to avoid taint problems when chdir'ing. # Not intended to increase security in any way; just intended to shut up the -T # complaints. If your Cwd module is giving you unreliable returns from cwd() # you have bigger problems than this. sub _untaintDir { my $dir = shift; $dir =~ m/\A(.+)\z/s; return $1; } sub addTree { my $self = shift; my ( $root, $dest, $pred, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $root = $_[0]->{root}; $dest = $_[0]->{zipName}; $pred = $_[0]->{select}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $root, $dest, $pred, $compressionLevel ) = @_; } return _error("root arg missing in call to addTree()") unless defined($root); $dest = '' unless defined($dest); $pred = sub { -r } unless defined($pred); my @files; my $startDir = _untaintDir( cwd() ); return _error( 'undef returned by _untaintDir on cwd ', cwd() ) unless $startDir; # This avoids chdir'ing in Find, in a way compatible with older # versions of File::Find. my $wanted = sub { local $main::_ = $File::Find::name; my $dir = _untaintDir($File::Find::dir); chdir($startDir); push( @files, $File::Find::name ) if (&$pred); chdir($dir); }; File::Find::find( $wanted, $root ); my $rootZipName = _asZipDirName( $root, 1 ); # with trailing slash my $pattern = $rootZipName eq './' ? '^' : "^\Q$rootZipName\E"; $dest = _asZipDirName( $dest, 1 ); # with trailing slash foreach my $fileName (@files) { my $isDir = -d $fileName; # normalize, remove leading ./ my $archiveName = _asZipDirName( $fileName, $isDir ); if ( $archiveName eq $rootZipName ) { $archiveName = $dest } else { $archiveName =~ s{$pattern}{$dest} } next if $archiveName =~ m{^\.?/?$}; # skip current dir my $member = $isDir ? $self->addDirectory( $fileName, $archiveName ) : $self->addFile( $fileName, $archiveName ); $member->desiredCompressionLevel($compressionLevel); return _error("add $fileName failed in addTree()") if !$member; } return AZ_OK; } sub addTreeMatching { my $self = shift; my ( $root, $dest, $pattern, $pred, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $root = $_[0]->{root}; $dest = $_[0]->{zipName}; $pattern = $_[0]->{pattern}; $pred = $_[0]->{select}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $root, $dest, $pattern, $pred, $compressionLevel ) = @_; } return _error("root arg missing in call to addTreeMatching()") unless defined($root); $dest = '' unless defined($dest); return _error("pattern missing in call to addTreeMatching()") unless defined($pattern); my $matcher = $pred ? sub { m{$pattern} && &$pred } : sub { m{$pattern} && -r }; return $self->addTree( $root, $dest, $matcher, $compressionLevel ); } # $zip->extractTree( $root, $dest [, $volume] ); # # $root and $dest are Unix-style. # $volume is in local FS format. # sub extractTree { my $self = shift; my ( $root, $dest, $volume ); if ( ref( $_[0] ) eq 'HASH' ) { $root = $_[0]->{root}; $dest = $_[0]->{zipName}; $volume = $_[0]->{volume}; } else { ( $root, $dest, $volume ) = @_; } $root = '' unless defined($root); $dest = './' unless defined($dest); my $pattern = "^\Q$root"; my @members = $self->membersMatching($pattern); foreach my $member (@members) { my $fileName = $member->fileName(); # in Unix format $fileName =~ s{$pattern}{$dest}; # in Unix format # convert to platform format: $fileName = Archive::Zip::_asLocalName( $fileName, $volume ); my $status = $member->extractToFileNamed($fileName); return $status if $status != AZ_OK; } return AZ_OK; } # $zip->updateMember( $memberOrName, $fileName ); # Returns (possibly updated) member, if any; undef on errors. sub updateMember { my $self = shift; my ( $oldMember, $fileName ); if ( ref( $_[0] ) eq 'HASH' ) { $oldMember = $_[0]->{memberOrZipName}; $fileName = $_[0]->{name}; } else { ( $oldMember, $fileName ) = @_; } if ( !defined($fileName) ) { _error("updateMember(): missing fileName argument"); return undef; } my @newStat = stat($fileName); if ( !@newStat ) { _ioError("Can't stat $fileName"); return undef; } my $isDir = -d _; my $memberName; if ( ref($oldMember) ) { $memberName = $oldMember->fileName(); } else { $oldMember = $self->memberNamed( $memberName = $oldMember ) || $self->memberNamed( $memberName = _asZipDirName( $oldMember, $isDir ) ); } unless ( defined($oldMember) && $oldMember->lastModTime() == $newStat[9] && $oldMember->isDirectory() == $isDir && ( $isDir || ( $oldMember->uncompressedSize() == $newStat[7] ) ) ) { # create the new member my $newMember = $isDir ? $self->ZIPMEMBERCLASS->newDirectoryNamed( $fileName, $memberName ) : $self->ZIPMEMBERCLASS->newFromFile( $fileName, $memberName ); unless ( defined($newMember) ) { _error("creation of member $fileName failed in updateMember()"); return undef; } # replace old member or append new one if ( defined($oldMember) ) { $self->replaceMember( $oldMember, $newMember ); } else { $self->addMember($newMember); } return $newMember; } return $oldMember; } # $zip->updateTree( $root, [ $dest, [ $pred [, $mirror]]] ); # # This takes the same arguments as addTree, but first checks to see # whether the file or directory already exists in the zip file. # # If the fourth argument $mirror is true, then delete all my members # if corresponding files weren't found. sub updateTree { my $self = shift; my ( $root, $dest, $pred, $mirror, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $root = $_[0]->{root}; $dest = $_[0]->{zipName}; $pred = $_[0]->{select}; $mirror = $_[0]->{mirror}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $root, $dest, $pred, $mirror, $compressionLevel ) = @_; } return _error("root arg missing in call to updateTree()") unless defined($root); $dest = '' unless defined($dest); $pred = sub { -r } unless defined($pred); $dest = _asZipDirName( $dest, 1 ); my $rootZipName = _asZipDirName( $root, 1 ); # with trailing slash my $pattern = $rootZipName eq './' ? '^' : "^\Q$rootZipName\E"; my @files; my $startDir = _untaintDir( cwd() ); return _error( 'undef returned by _untaintDir on cwd ', cwd() ) unless $startDir; # This avoids chdir'ing in Find, in a way compatible with older # versions of File::Find. my $wanted = sub { local $main::_ = $File::Find::name; my $dir = _untaintDir($File::Find::dir); chdir($startDir); push( @files, $File::Find::name ) if (&$pred); chdir($dir); }; File::Find::find( $wanted, $root ); # Now @files has all the files that I could potentially be adding to # the zip. Only add the ones that are necessary. # For each file (updated or not), add its member name to @done. my %done; foreach my $fileName (@files) { my @newStat = stat($fileName); my $isDir = -d _; # normalize, remove leading ./ my $memberName = _asZipDirName( $fileName, $isDir ); if ( $memberName eq $rootZipName ) { $memberName = $dest } else { $memberName =~ s{$pattern}{$dest} } next if $memberName =~ m{^\.?/?$}; # skip current dir $done{$memberName} = 1; my $changedMember = $self->updateMember( $memberName, $fileName ); $changedMember->desiredCompressionLevel($compressionLevel); return _error("updateTree failed to update $fileName") unless ref($changedMember); } # @done now has the archive names corresponding to all the found files. # If we're mirroring, delete all those members that aren't in @done. if ($mirror) { foreach my $member ( $self->members() ) { $self->removeMember($member) unless $done{ $member->fileName() }; } } return AZ_OK; } 1; FILE'cd35b746/Archive/Zip/DirectoryMember.pm#line 1 "/usr/local/share/perl/5.10.1/Archive/Zip/DirectoryMember.pm" package Archive::Zip::DirectoryMember; use strict; use File::Path; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw( Archive::Zip::Member ); } use Archive::Zip qw( :ERROR_CODES :UTILITY_METHODS ); sub _newNamed { my $class = shift; my $fileName = shift; # FS name my $newName = shift; # Zip name $newName = _asZipDirName($fileName) unless $newName; my $self = $class->new(@_); $self->{'externalFileName'} = $fileName; $self->fileName($newName); if ( -e $fileName ) { # -e does NOT do a full stat, so we need to do one now if ( -d _ ) { my @stat = stat(_); $self->unixFileAttributes( $stat[2] ); my $mod_t = $stat[9]; if ( $^O eq 'MSWin32' and !$mod_t ) { $mod_t = time(); } $self->setLastModFileDateTimeFromUnix($mod_t); } else { # hmm.. trying to add a non-directory? _error( $fileName, ' exists but is not a directory' ); return undef; } } else { $self->unixFileAttributes( $self->DEFAULT_DIRECTORY_PERMISSIONS ); $self->setLastModFileDateTimeFromUnix( time() ); } return $self; } sub externalFileName { shift->{'externalFileName'}; } sub isDirectory { return 1; } sub extractToFileNamed { my $self = shift; my $name = shift; # local FS name my $attribs = $self->unixFileAttributes() & 07777; mkpath( $name, 0, $attribs ); # croaks on error utime( $self->lastModTime(), $self->lastModTime(), $name ); return AZ_OK; } sub fileName { my $self = shift; my $newName = shift; $newName =~ s{/?$}{/} if defined($newName); return $self->SUPER::fileName($newName); } # So people don't get too confused. This way it looks like the problem # is in their code... sub contents { return wantarray ? ( undef, AZ_OK ) : undef; } 1; FILE"a334f53d/Archive/Zip/FileMember.pm#line 1 "/usr/local/share/perl/5.10.1/Archive/Zip/FileMember.pm" package Archive::Zip::FileMember; use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw ( Archive::Zip::Member ); } use Archive::Zip qw( :UTILITY_METHODS ); sub externalFileName { shift->{'externalFileName'}; } # Return true if I depend on the named file sub _usesFileNamed { my $self = shift; my $fileName = shift; my $xfn = $self->externalFileName(); return undef if ref($xfn); return $xfn eq $fileName; } sub fh { my $self = shift; $self->_openFile() if !defined( $self->{'fh'} ) || !$self->{'fh'}->opened(); return $self->{'fh'}; } # opens my file handle from my file name sub _openFile { my $self = shift; my ( $status, $fh ) = _newFileHandle( $self->externalFileName(), 'r' ); if ( !$status ) { _ioError( "Can't open", $self->externalFileName() ); return undef; } $self->{'fh'} = $fh; _binmode($fh); return $fh; } # Make sure I close my file handle sub endRead { my $self = shift; undef $self->{'fh'}; # _closeFile(); return $self->SUPER::endRead(@_); } sub _become { my $self = shift; my $newClass = shift; return $self if ref($self) eq $newClass; delete( $self->{'externalFileName'} ); delete( $self->{'fh'} ); return $self->SUPER::_become($newClass); } 1; FILE0450e742/Archive/Zip/Member.pmO#line 1 "/usr/local/share/perl/5.10.1/Archive/Zip/Member.pm" package Archive::Zip::Member; # A generic membet of an archive use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw( Archive::Zip ); } use Archive::Zip qw( :CONSTANTS :MISC_CONSTANTS :ERROR_CODES :PKZIP_CONSTANTS :UTILITY_METHODS ); use Time::Local (); use Compress::Raw::Zlib qw( Z_OK Z_STREAM_END MAX_WBITS ); use File::Path; use File::Basename; use constant ZIPFILEMEMBERCLASS => 'Archive::Zip::ZipFileMember'; use constant NEWFILEMEMBERCLASS => 'Archive::Zip::NewFileMember'; use constant STRINGMEMBERCLASS => 'Archive::Zip::StringMember'; use constant DIRECTORYMEMBERCLASS => 'Archive::Zip::DirectoryMember'; # Unix perms for default creation of files/dirs. use constant DEFAULT_DIRECTORY_PERMISSIONS => 040755; use constant DEFAULT_FILE_PERMISSIONS => 0100666; use constant DIRECTORY_ATTRIB => 040000; use constant FILE_ATTRIB => 0100000; # Returns self if successful, else undef # Assumes that fh is positioned at beginning of central directory file header. # Leaves fh positioned immediately after file header or EOCD signature. sub _newFromZipFile { my $class = shift; my $self = $class->ZIPFILEMEMBERCLASS->_newFromZipFile(@_); return $self; } sub newFromString { my $class = shift; my ( $stringOrStringRef, $fileName ); if ( ref( $_[0] ) eq 'HASH' ) { $stringOrStringRef = $_[0]->{string}; $fileName = $_[0]->{zipName}; } else { ( $stringOrStringRef, $fileName ) = @_; } my $self = $class->STRINGMEMBERCLASS->_newFromString( $stringOrStringRef, $fileName ); return $self; } sub newFromFile { my $class = shift; my ( $fileName, $zipName ); if ( ref( $_[0] ) eq 'HASH' ) { $fileName = $_[0]->{fileName}; $zipName = $_[0]->{zipName}; } else { ( $fileName, $zipName ) = @_; } my $self = $class->NEWFILEMEMBERCLASS->_newFromFileNamed( $fileName, $zipName ); return $self; } sub newDirectoryNamed { my $class = shift; my ( $directoryName, $newName ); if ( ref( $_[0] ) eq 'HASH' ) { $directoryName = $_[0]->{directoryName}; $newName = $_[0]->{zipName}; } else { ( $directoryName, $newName ) = @_; } my $self = $class->DIRECTORYMEMBERCLASS->_newNamed( $directoryName, $newName ); return $self; } sub new { my $class = shift; my $self = { 'lastModFileDateTime' => 0, 'fileAttributeFormat' => FA_UNIX, 'versionMadeBy' => 20, 'versionNeededToExtract' => 20, 'bitFlag' => 0, 'compressionMethod' => COMPRESSION_STORED, 'desiredCompressionMethod' => COMPRESSION_STORED, 'desiredCompressionLevel' => COMPRESSION_LEVEL_NONE, 'internalFileAttributes' => 0, 'externalFileAttributes' => 0, # set later 'fileName' => '', 'cdExtraField' => '', 'localExtraField' => '', 'fileComment' => '', 'crc32' => 0, 'compressedSize' => 0, 'uncompressedSize' => 0, 'isSymbolicLink' => 0, @_ }; bless( $self, $class ); $self->unixFileAttributes( $self->DEFAULT_FILE_PERMISSIONS ); return $self; } sub _becomeDirectoryIfNecessary { my $self = shift; $self->_become(DIRECTORYMEMBERCLASS) if $self->isDirectory(); return $self; } # Morph into given class (do whatever cleanup I need to do) sub _become { return bless( $_[0], $_[1] ); } sub versionMadeBy { shift->{'versionMadeBy'}; } sub fileAttributeFormat { my $self = shift; if (@_) { $self->{fileAttributeFormat} = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{format} : $_[0]; } else { return $self->{fileAttributeFormat}; } } sub versionNeededToExtract { shift->{'versionNeededToExtract'}; } sub bitFlag { my $self = shift; # Set General Purpose Bit Flags according to the desiredCompressionLevel setting if ( $self->desiredCompressionLevel == 1 || $self->desiredCompressionLevel == 2 ) { $self->{'bitFlag'} = DEFLATING_COMPRESSION_FAST; } elsif ( $self->desiredCompressionLevel == 3 || $self->desiredCompressionLevel == 4 || $self->desiredCompressionLevel == 5 || $self->desiredCompressionLevel == 6 || $self->desiredCompressionLevel == 7 ) { $self->{'bitFlag'} = DEFLATING_COMPRESSION_NORMAL; } elsif ( $self->desiredCompressionLevel == 8 || $self->desiredCompressionLevel == 9 ) { $self->{'bitFlag'} = DEFLATING_COMPRESSION_MAXIMUM; } $self->{'bitFlag'}; } sub compressionMethod { shift->{'compressionMethod'}; } sub desiredCompressionMethod { my $self = shift; my $newDesiredCompressionMethod = ( ref( $_[0] ) eq 'HASH' ) ? shift->{compressionMethod} : shift; my $oldDesiredCompressionMethod = $self->{'desiredCompressionMethod'}; if ( defined($newDesiredCompressionMethod) ) { $self->{'desiredCompressionMethod'} = $newDesiredCompressionMethod; if ( $newDesiredCompressionMethod == COMPRESSION_STORED ) { $self->{'desiredCompressionLevel'} = 0; $self->{'bitFlag'} &= ~GPBF_HAS_DATA_DESCRIPTOR_MASK; } elsif ( $oldDesiredCompressionMethod == COMPRESSION_STORED ) { $self->{'desiredCompressionLevel'} = COMPRESSION_LEVEL_DEFAULT; } } return $oldDesiredCompressionMethod; } sub desiredCompressionLevel { my $self = shift; my $newDesiredCompressionLevel = ( ref( $_[0] ) eq 'HASH' ) ? shift->{compressionLevel} : shift; my $oldDesiredCompressionLevel = $self->{'desiredCompressionLevel'}; if ( defined($newDesiredCompressionLevel) ) { $self->{'desiredCompressionLevel'} = $newDesiredCompressionLevel; $self->{'desiredCompressionMethod'} = ( $newDesiredCompressionLevel ? COMPRESSION_DEFLATED : COMPRESSION_STORED ); } return $oldDesiredCompressionLevel; } sub fileName { my $self = shift; my $newName = shift; if ($newName) { $newName =~ s{[\\/]+}{/}g; # deal with dos/windoze problems $self->{'fileName'} = $newName; } return $self->{'fileName'}; } sub lastModFileDateTime { my $modTime = shift->{'lastModFileDateTime'}; $modTime =~ m/^(\d+)$/; # untaint return $1; } sub lastModTime { my $self = shift; return _dosToUnixTime( $self->lastModFileDateTime() ); } sub setLastModFileDateTimeFromUnix { my $self = shift; my $time_t = shift; $self->{'lastModFileDateTime'} = _unixToDosTime($time_t); } sub internalFileAttributes { shift->{'internalFileAttributes'}; } sub externalFileAttributes { shift->{'externalFileAttributes'}; } # Convert UNIX permissions into proper value for zip file # Usable as a function or a method sub _mapPermissionsFromUnix { my $self = shift; my $mode = shift; my $attribs = $mode << 16; # Microsoft Windows Explorer needs this bit set for directories if ( $mode & DIRECTORY_ATTRIB ) { $attribs |= 16; } return $attribs; # TODO: map more MS-DOS perms } # Convert ZIP permissions into Unix ones # # This was taken from Info-ZIP group's portable UnZip # zipfile-extraction program, version 5.50. # http://www.info-zip.org/pub/infozip/ # # See the mapattr() function in unix/unix.c # See the attribute format constants in unzpriv.h # # XXX Note that there's one situation that isn't implemented # yet that depends on the "extra field." sub _mapPermissionsToUnix { my $self = shift; my $format = $self->{'fileAttributeFormat'}; my $attribs = $self->{'externalFileAttributes'}; my $mode = 0; if ( $format == FA_AMIGA ) { $attribs = $attribs >> 17 & 7; # Amiga RWE bits $mode = $attribs << 6 | $attribs << 3 | $attribs; return $mode; } if ( $format == FA_THEOS ) { $attribs &= 0xF1FFFFFF; if ( ( $attribs & 0xF0000000 ) != 0x40000000 ) { $attribs &= 0x01FFFFFF; # not a dir, mask all ftype bits } else { $attribs &= 0x41FFFFFF; # leave directory bit as set } } if ( $format == FA_UNIX || $format == FA_VAX_VMS || $format == FA_ACORN || $format == FA_ATARI_ST || $format == FA_BEOS || $format == FA_QDOS || $format == FA_TANDEM ) { $mode = $attribs >> 16; return $mode if $mode != 0 or not $self->localExtraField; # warn("local extra field is: ", $self->localExtraField, "\n"); # XXX This condition is not implemented # I'm just including the comments from the info-zip section for now. # Some (non-Info-ZIP) implementations of Zip for Unix and # VMS (and probably others ??) leave 0 in the upper 16-bit # part of the external_file_attributes field. Instead, they # store file permission attributes in some extra field. # As a work-around, we search for the presence of one of # these extra fields and fall back to the MSDOS compatible # part of external_file_attributes if one of the known # e.f. types has been detected. # Later, we might implement extraction of the permission # bits from the VMS extra field. But for now, the work-around # should be sufficient to provide "readable" extracted files. # (For ASI Unix e.f., an experimental remap from the e.f. # mode value IS already provided!) } # PKWARE's PKZip for Unix marks entries as FA_MSDOS, but stores the # Unix attributes in the upper 16 bits of the external attributes # field, just like Info-ZIP's Zip for Unix. We try to use that # value, after a check for consistency with the MSDOS attribute # bits (see below). if ( $format == FA_MSDOS ) { $mode = $attribs >> 16; } # FA_MSDOS, FA_OS2_HPFS, FA_WINDOWS_NTFS, FA_MACINTOSH, FA_TOPS20 $attribs = !( $attribs & 1 ) << 1 | ( $attribs & 0x10 ) >> 4; # keep previous $mode setting when its "owner" # part appears to be consistent with DOS attribute flags! return $mode if ( $mode & 0700 ) == ( 0400 | $attribs << 6 ); $mode = 0444 | $attribs << 6 | $attribs << 3 | $attribs; return $mode; } sub unixFileAttributes { my $self = shift; my $oldPerms = $self->_mapPermissionsToUnix; my $perms; if ( @_ ) { $perms = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{attributes} : $_[0]; if ( $self->isDirectory ) { $perms &= ~FILE_ATTRIB; $perms |= DIRECTORY_ATTRIB; } else { $perms &= ~DIRECTORY_ATTRIB; $perms |= FILE_ATTRIB; } $self->{externalFileAttributes} = $self->_mapPermissionsFromUnix($perms); } return $oldPerms; } sub localExtraField { my $self = shift; if (@_) { $self->{localExtraField} = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{field} : $_[0]; } else { return $self->{localExtraField}; } } sub cdExtraField { my $self = shift; if (@_) { $self->{cdExtraField} = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{field} : $_[0]; } else { return $self->{cdExtraField}; } } sub extraFields { my $self = shift; return $self->localExtraField() . $self->cdExtraField(); } sub fileComment { my $self = shift; if (@_) { $self->{fileComment} = ( ref( $_[0] ) eq 'HASH' ) ? pack( 'C0a*', $_[0]->{comment} ) : pack( 'C0a*', $_[0] ); } else { return $self->{fileComment}; } } sub hasDataDescriptor { my $self = shift; if (@_) { my $shouldHave = shift; if ($shouldHave) { $self->{'bitFlag'} |= GPBF_HAS_DATA_DESCRIPTOR_MASK; } else { $self->{'bitFlag'} &= ~GPBF_HAS_DATA_DESCRIPTOR_MASK; } } return $self->{'bitFlag'} & GPBF_HAS_DATA_DESCRIPTOR_MASK; } sub crc32 { shift->{'crc32'}; } sub crc32String { sprintf( "%08x", shift->{'crc32'} ); } sub compressedSize { shift->{'compressedSize'}; } sub uncompressedSize { shift->{'uncompressedSize'}; } sub isEncrypted { shift->bitFlag() & GPBF_ENCRYPTED_MASK; } sub isTextFile { my $self = shift; my $bit = $self->internalFileAttributes() & IFA_TEXT_FILE_MASK; if (@_) { my $flag = ( ref( $_[0] ) eq 'HASH' ) ? shift->{flag} : shift; $self->{'internalFileAttributes'} &= ~IFA_TEXT_FILE_MASK; $self->{'internalFileAttributes'} |= ( $flag ? IFA_TEXT_FILE: IFA_BINARY_FILE ); } return $bit == IFA_TEXT_FILE; } sub isBinaryFile { my $self = shift; my $bit = $self->internalFileAttributes() & IFA_TEXT_FILE_MASK; if (@_) { my $flag = shift; $self->{'internalFileAttributes'} &= ~IFA_TEXT_FILE_MASK; $self->{'internalFileAttributes'} |= ( $flag ? IFA_BINARY_FILE: IFA_TEXT_FILE ); } return $bit == IFA_BINARY_FILE; } sub extractToFileNamed { my $self = shift; # local FS name my $name = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{name} : $_[0]; $self->{'isSymbolicLink'} = 0; # Check if the file / directory is a symbolic link or not if ( $self->{'externalFileAttributes'} == 0xA1FF0000 ) { $self->{'isSymbolicLink'} = 1; $self->{'newName'} = $name; my ( $status, $fh ) = _newFileHandle( $name, 'r' ); my $retval = $self->extractToFileHandle($fh); $fh->close(); } else { #return _writeSymbolicLink($self, $name) if $self->isSymbolicLink(); return _error("encryption unsupported") if $self->isEncrypted(); mkpath( dirname($name) ); # croaks on error my ( $status, $fh ) = _newFileHandle( $name, 'w' ); return _ioError("Can't open file $name for write") unless $status; my $retval = $self->extractToFileHandle($fh); $fh->close(); chmod ($self->unixFileAttributes(), $name) or return _error("Can't chmod() ${name}: $!"); utime( $self->lastModTime(), $self->lastModTime(), $name ); return $retval; } } sub _writeSymbolicLink { my $self = shift; my $name = shift; my $chunkSize = $Archive::Zip::ChunkSize; #my ( $outRef, undef ) = $self->readChunk($chunkSize); my $fh; my $retval = $self->extractToFileHandle($fh); my ( $outRef, undef ) = $self->readChunk(100); } sub isSymbolicLink { my $self = shift; if ( $self->{'externalFileAttributes'} == 0xA1FF0000 ) { $self->{'isSymbolicLink'} = 1; } else { return 0; } 1; } sub isDirectory { return 0; } sub externalFileName { return undef; } # The following are used when copying data sub _writeOffset { shift->{'writeOffset'}; } sub _readOffset { shift->{'readOffset'}; } sub writeLocalHeaderRelativeOffset { shift->{'writeLocalHeaderRelativeOffset'}; } sub wasWritten { shift->{'wasWritten'} } sub _dataEnded { shift->{'dataEnded'}; } sub _readDataRemaining { shift->{'readDataRemaining'}; } sub _inflater { shift->{'inflater'}; } sub _deflater { shift->{'deflater'}; } # Return the total size of my local header sub _localHeaderSize { my $self = shift; return SIGNATURE_LENGTH + LOCAL_FILE_HEADER_LENGTH + length( $self->fileName() ) + length( $self->localExtraField() ); } # Return the total size of my CD header sub _centralDirectoryHeaderSize { my $self = shift; return SIGNATURE_LENGTH + CENTRAL_DIRECTORY_FILE_HEADER_LENGTH + length( $self->fileName() ) + length( $self->cdExtraField() ) + length( $self->fileComment() ); } # DOS date/time format # 0-4 (5) Second divided by 2 # 5-10 (6) Minute (0-59) # 11-15 (5) Hour (0-23 on a 24-hour clock) # 16-20 (5) Day of the month (1-31) # 21-24 (4) Month (1 = January, 2 = February, etc.) # 25-31 (7) Year offset from 1980 (add 1980 to get actual year) # Convert DOS date/time format to unix time_t format # NOT AN OBJECT METHOD! sub _dosToUnixTime { my $dt = shift; return time() unless defined($dt); my $year = ( ( $dt >> 25 ) & 0x7f ) + 80; my $mon = ( ( $dt >> 21 ) & 0x0f ) - 1; my $mday = ( ( $dt >> 16 ) & 0x1f ); my $hour = ( ( $dt >> 11 ) & 0x1f ); my $min = ( ( $dt >> 5 ) & 0x3f ); my $sec = ( ( $dt << 1 ) & 0x3e ); # catch errors my $time_t = eval { Time::Local::timelocal( $sec, $min, $hour, $mday, $mon, $year ); }; return time() if ($@); return $time_t; } # Note, this isn't exactly UTC 1980, it's 1980 + 12 hours and 1 # minute so that nothing timezoney can muck us up. my $safe_epoch = 315576060; # convert a unix time to DOS date/time # NOT AN OBJECT METHOD! sub _unixToDosTime { my $time_t = shift; unless ($time_t) { _error("Tried to add member with zero or undef value for time"); $time_t = $safe_epoch; } if ( $time_t < $safe_epoch ) { _ioError("Unsupported date before 1980 encountered, moving to 1980"); $time_t = $safe_epoch; } my ( $sec, $min, $hour, $mday, $mon, $year ) = localtime($time_t); my $dt = 0; $dt += ( $sec >> 1 ); $dt += ( $min << 5 ); $dt += ( $hour << 11 ); $dt += ( $mday << 16 ); $dt += ( ( $mon + 1 ) << 21 ); $dt += ( ( $year - 80 ) << 25 ); return $dt; } # Write my local header to a file handle. # Stores the offset to the start of the header in my # writeLocalHeaderRelativeOffset member. # Returns AZ_OK on success. sub _writeLocalFileHeader { my $self = shift; my $fh = shift; my $signatureData = pack( SIGNATURE_FORMAT, LOCAL_FILE_HEADER_SIGNATURE ); $self->_print($fh, $signatureData) or return _ioError("writing local header signature"); my $header = pack( LOCAL_FILE_HEADER_FORMAT, $self->versionNeededToExtract(), $self->bitFlag(), $self->desiredCompressionMethod(), $self->lastModFileDateTime(), $self->crc32(), $self->compressedSize(), # may need to be re-written later $self->uncompressedSize(), length( $self->fileName() ), length( $self->localExtraField() ) ); $self->_print($fh, $header) or return _ioError("writing local header"); # Check for a valid filename or a filename equal to a literal `0' if ( $self->fileName() || $self->fileName eq '0' ) { $self->_print($fh, $self->fileName() ) or return _ioError("writing local header filename"); } if ( $self->localExtraField() ) { $self->_print($fh, $self->localExtraField() ) or return _ioError("writing local extra field"); } return AZ_OK; } sub _writeCentralDirectoryFileHeader { my $self = shift; my $fh = shift; my $sigData = pack( SIGNATURE_FORMAT, CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE ); $self->_print($fh, $sigData) or return _ioError("writing central directory header signature"); my $fileNameLength = length( $self->fileName() ); my $extraFieldLength = length( $self->cdExtraField() ); my $fileCommentLength = length( $self->fileComment() ); my $header = pack( CENTRAL_DIRECTORY_FILE_HEADER_FORMAT, $self->versionMadeBy(), $self->fileAttributeFormat(), $self->versionNeededToExtract(), $self->bitFlag(), $self->desiredCompressionMethod(), $self->lastModFileDateTime(), $self->crc32(), # these three fields should have been updated $self->_writeOffset(), # by writing the data stream out $self->uncompressedSize(), # $fileNameLength, $extraFieldLength, $fileCommentLength, 0, # {'diskNumberStart'}, $self->internalFileAttributes(), $self->externalFileAttributes(), $self->writeLocalHeaderRelativeOffset() ); $self->_print($fh, $header) or return _ioError("writing central directory header"); if ($fileNameLength) { $self->_print($fh, $self->fileName() ) or return _ioError("writing central directory header signature"); } if ($extraFieldLength) { $self->_print($fh, $self->cdExtraField() ) or return _ioError("writing central directory extra field"); } if ($fileCommentLength) { $self->_print($fh, $self->fileComment() ) or return _ioError("writing central directory file comment"); } return AZ_OK; } # This writes a data descriptor to the given file handle. # Assumes that crc32, writeOffset, and uncompressedSize are # set correctly (they should be after a write). # Further, the local file header should have the # GPBF_HAS_DATA_DESCRIPTOR_MASK bit set. sub _writeDataDescriptor { my $self = shift; my $fh = shift; my $header = pack( SIGNATURE_FORMAT . DATA_DESCRIPTOR_FORMAT, DATA_DESCRIPTOR_SIGNATURE, $self->crc32(), $self->_writeOffset(), # compressed size $self->uncompressedSize() ); $self->_print($fh, $header) or return _ioError("writing data descriptor"); return AZ_OK; } # Re-writes the local file header with new crc32 and compressedSize fields. # To be called after writing the data stream. # Assumes that filename and extraField sizes didn't change since last written. sub _refreshLocalFileHeader { my $self = shift; my $fh = shift; my $here = $fh->tell(); $fh->seek( $self->writeLocalHeaderRelativeOffset() + SIGNATURE_LENGTH, IO::Seekable::SEEK_SET ) or return _ioError("seeking to rewrite local header"); my $header = pack( LOCAL_FILE_HEADER_FORMAT, $self->versionNeededToExtract(), $self->bitFlag(), $self->desiredCompressionMethod(), $self->lastModFileDateTime(), $self->crc32(), $self->_writeOffset(), # compressed size $self->uncompressedSize(), length( $self->fileName() ), length( $self->localExtraField() ) ); $self->_print($fh, $header) or return _ioError("re-writing local header"); $fh->seek( $here, IO::Seekable::SEEK_SET ) or return _ioError("seeking after rewrite of local header"); return AZ_OK; } sub readChunk { my $self = shift; my $chunkSize = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{chunkSize} : $_[0]; if ( $self->readIsDone() ) { $self->endRead(); my $dummy = ''; return ( \$dummy, AZ_STREAM_END ); } $chunkSize = $Archive::Zip::ChunkSize if not defined($chunkSize); $chunkSize = $self->_readDataRemaining() if $chunkSize > $self->_readDataRemaining(); my $buffer = ''; my $outputRef; my ( $bytesRead, $status ) = $self->_readRawChunk( \$buffer, $chunkSize ); return ( \$buffer, $status ) unless $status == AZ_OK; $self->{'readDataRemaining'} -= $bytesRead; $self->{'readOffset'} += $bytesRead; if ( $self->compressionMethod() == COMPRESSION_STORED ) { $self->{'crc32'} = $self->computeCRC32( $buffer, $self->{'crc32'} ); } ( $outputRef, $status ) = &{ $self->{'chunkHandler'} }( $self, \$buffer ); $self->{'writeOffset'} += length($$outputRef); $self->endRead() if $self->readIsDone(); return ( $outputRef, $status ); } # Read the next raw chunk of my data. Subclasses MUST implement. # my ( $bytesRead, $status) = $self->_readRawChunk( \$buffer, $chunkSize ); sub _readRawChunk { my $self = shift; return $self->_subclassResponsibility(); } # A place holder to catch rewindData errors if someone ignores # the error code. sub _noChunk { my $self = shift; return ( \undef, _error("trying to copy chunk when init failed") ); } # Basically a no-op so that I can have a consistent interface. # ( $outputRef, $status) = $self->_copyChunk( \$buffer ); sub _copyChunk { my ( $self, $dataRef ) = @_; return ( $dataRef, AZ_OK ); } # ( $outputRef, $status) = $self->_deflateChunk( \$buffer ); sub _deflateChunk { my ( $self, $buffer ) = @_; my ( $status ) = $self->_deflater()->deflate( $buffer, my $out ); if ( $self->_readDataRemaining() == 0 ) { my $extraOutput; ( $status ) = $self->_deflater()->flush($extraOutput); $out .= $extraOutput; $self->endRead(); return ( \$out, AZ_STREAM_END ); } elsif ( $status == Z_OK ) { return ( \$out, AZ_OK ); } else { $self->endRead(); my $retval = _error( 'deflate error', $status ); my $dummy = ''; return ( \$dummy, $retval ); } } # ( $outputRef, $status) = $self->_inflateChunk( \$buffer ); sub _inflateChunk { my ( $self, $buffer ) = @_; my ( $status ) = $self->_inflater()->inflate( $buffer, my $out ); my $retval; $self->endRead() unless $status == Z_OK; if ( $status == Z_OK || $status == Z_STREAM_END ) { $retval = ( $status == Z_STREAM_END ) ? AZ_STREAM_END: AZ_OK; return ( \$out, $retval ); } else { $retval = _error( 'inflate error', $status ); my $dummy = ''; return ( \$dummy, $retval ); } } sub rewindData { my $self = shift; my $status; # set to trap init errors $self->{'chunkHandler'} = $self->can('_noChunk'); # Work around WinZip bug with 0-length DEFLATED files $self->desiredCompressionMethod(COMPRESSION_STORED) if $self->uncompressedSize() == 0; # assume that we're going to read the whole file, and compute the CRC anew. $self->{'crc32'} = 0 if ( $self->compressionMethod() == COMPRESSION_STORED ); # These are the only combinations of methods we deal with right now. if ( $self->compressionMethod() == COMPRESSION_STORED and $self->desiredCompressionMethod() == COMPRESSION_DEFLATED ) { ( $self->{'deflater'}, $status ) = Compress::Raw::Zlib::Deflate->new( '-Level' => $self->desiredCompressionLevel(), '-WindowBits' => -MAX_WBITS(), # necessary magic '-Bufsize' => $Archive::Zip::ChunkSize, @_ ); # pass additional options return _error( 'deflateInit error:', $status ) unless $status == Z_OK; $self->{'chunkHandler'} = $self->can('_deflateChunk'); } elsif ( $self->compressionMethod() == COMPRESSION_DEFLATED and $self->desiredCompressionMethod() == COMPRESSION_STORED ) { ( $self->{'inflater'}, $status ) = Compress::Raw::Zlib::Inflate->new( '-WindowBits' => -MAX_WBITS(), # necessary magic '-Bufsize' => $Archive::Zip::ChunkSize, @_ ); # pass additional options return _error( 'inflateInit error:', $status ) unless $status == Z_OK; $self->{'chunkHandler'} = $self->can('_inflateChunk'); } elsif ( $self->compressionMethod() == $self->desiredCompressionMethod() ) { $self->{'chunkHandler'} = $self->can('_copyChunk'); } else { return _error( sprintf( "Unsupported compression combination: read %d, write %d", $self->compressionMethod(), $self->desiredCompressionMethod() ) ); } $self->{'readDataRemaining'} = ( $self->compressionMethod() == COMPRESSION_STORED ) ? $self->uncompressedSize() : $self->compressedSize(); $self->{'dataEnded'} = 0; $self->{'readOffset'} = 0; return AZ_OK; } sub endRead { my $self = shift; delete $self->{'inflater'}; delete $self->{'deflater'}; $self->{'dataEnded'} = 1; $self->{'readDataRemaining'} = 0; return AZ_OK; } sub readIsDone { my $self = shift; return ( $self->_dataEnded() or !$self->_readDataRemaining() ); } sub contents { my $self = shift; my $newContents = shift; if ( defined($newContents) ) { # change our type and call the subclass contents method. $self->_become(STRINGMEMBERCLASS); return $self->contents( pack( 'C0a*', $newContents ) ) ; # in case of Unicode } else { my $oldCompression = $self->desiredCompressionMethod(COMPRESSION_STORED); my $status = $self->rewindData(@_); if ( $status != AZ_OK ) { $self->endRead(); return $status; } my $retval = ''; while ( $status == AZ_OK ) { my $ref; ( $ref, $status ) = $self->readChunk( $self->_readDataRemaining() ); # did we get it in one chunk? if ( length($$ref) == $self->uncompressedSize() ) { $retval = $$ref; } else { $retval .= $$ref } } $self->desiredCompressionMethod($oldCompression); $self->endRead(); $status = AZ_OK if $status == AZ_STREAM_END; $retval = undef unless $status == AZ_OK; return wantarray ? ( $retval, $status ) : $retval; } } sub extractToFileHandle { my $self = shift; return _error("encryption unsupported") if $self->isEncrypted(); my $fh = ( ref( $_[0] ) eq 'HASH' ) ? shift->{fileHandle} : shift; _binmode($fh); my $oldCompression = $self->desiredCompressionMethod(COMPRESSION_STORED); my $status = $self->rewindData(@_); $status = $self->_writeData($fh) if $status == AZ_OK; $self->desiredCompressionMethod($oldCompression); $self->endRead(); return $status; } # write local header and data stream to file handle sub _writeToFileHandle { my $self = shift; my $fh = shift; my $fhIsSeekable = shift; my $offset = shift; return _error("no member name given for $self") if $self->fileName() eq ''; $self->{'writeLocalHeaderRelativeOffset'} = $offset; $self->{'wasWritten'} = 0; # Determine if I need to write a data descriptor # I need to do this if I can't refresh the header # and I don't know compressed size or crc32 fields. my $headerFieldsUnknown = ( ( $self->uncompressedSize() > 0 ) and ($self->compressionMethod() == COMPRESSION_STORED or $self->desiredCompressionMethod() == COMPRESSION_DEFLATED ) ); my $shouldWriteDataDescriptor = ( $headerFieldsUnknown and not $fhIsSeekable ); $self->hasDataDescriptor(1) if ($shouldWriteDataDescriptor); $self->{'writeOffset'} = 0; my $status = $self->rewindData(); ( $status = $self->_writeLocalFileHeader($fh) ) if $status == AZ_OK; ( $status = $self->_writeData($fh) ) if $status == AZ_OK; if ( $status == AZ_OK ) { $self->{'wasWritten'} = 1; if ( $self->hasDataDescriptor() ) { $status = $self->_writeDataDescriptor($fh); } elsif ($headerFieldsUnknown) { $status = $self->_refreshLocalFileHeader($fh); } } return $status; } # Copy my (possibly compressed) data to given file handle. # Returns C on success sub _writeData { my $self = shift; my $writeFh = shift; # If symbolic link, just create one if the operating system is Linux, Unix, BSD or VMS # TODO: Add checks for other operating systems if ( $self->{'isSymbolicLink'} == 1 && $^O eq 'linux' ) { my $chunkSize = $Archive::Zip::ChunkSize; my ( $outRef, $status ) = $self->readChunk($chunkSize); symlink $$outRef, $self->{'newName'}; } else { return AZ_OK if ( $self->uncompressedSize() == 0 ); my $status; my $chunkSize = $Archive::Zip::ChunkSize; while ( $self->_readDataRemaining() > 0 ) { my $outRef; ( $outRef, $status ) = $self->readChunk($chunkSize); return $status if ( $status != AZ_OK and $status != AZ_STREAM_END ); if ( length($$outRef) > 0 ) { $self->_print($writeFh, $$outRef) or return _ioError("write error during copy"); } last if $status == AZ_STREAM_END; } $self->{'compressedSize'} = $self->_writeOffset(); } return AZ_OK; } # Return true if I depend on the named file sub _usesFileNamed { return 0; } 1; FILE%d3a259c9/Archive/Zip/NewFileMember.pm#line 1 "/usr/local/share/perl/5.10.1/Archive/Zip/NewFileMember.pm" package Archive::Zip::NewFileMember; use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw ( Archive::Zip::FileMember ); } use Archive::Zip qw( :CONSTANTS :ERROR_CODES :UTILITY_METHODS ); # Given a file name, set up for eventual writing. sub _newFromFileNamed { my $class = shift; my $fileName = shift; # local FS format my $newName = shift; $newName = _asZipDirName($fileName) unless defined($newName); return undef unless ( stat($fileName) && -r _ && !-d _ ); my $self = $class->new(@_); $self->{'fileName'} = $newName; $self->{'externalFileName'} = $fileName; $self->{'compressionMethod'} = COMPRESSION_STORED; my @stat = stat(_); $self->{'compressedSize'} = $self->{'uncompressedSize'} = $stat[7]; $self->desiredCompressionMethod( ( $self->compressedSize() > 0 ) ? COMPRESSION_DEFLATED : COMPRESSION_STORED ); $self->unixFileAttributes( $stat[2] ); $self->setLastModFileDateTimeFromUnix( $stat[9] ); $self->isTextFile( -T _ ); return $self; } sub rewindData { my $self = shift; my $status = $self->SUPER::rewindData(@_); return $status unless $status == AZ_OK; return AZ_IO_ERROR unless $self->fh(); $self->fh()->clearerr(); $self->fh()->seek( 0, IO::Seekable::SEEK_SET ) or return _ioError( "rewinding", $self->externalFileName() ); return AZ_OK; } # Return bytes read. Note that first parameter is a ref to a buffer. # my $data; # my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize ); sub _readRawChunk { my ( $self, $dataRef, $chunkSize ) = @_; return ( 0, AZ_OK ) unless $chunkSize; my $bytesRead = $self->fh()->read( $$dataRef, $chunkSize ) or return ( 0, _ioError("reading data") ); return ( $bytesRead, AZ_OK ); } # If I already exist, extraction is a no-op. sub extractToFileNamed { my $self = shift; my $name = shift; # local FS name if ( File::Spec->rel2abs($name) eq File::Spec->rel2abs( $self->externalFileName() ) and -r $name ) { return AZ_OK; } else { return $self->SUPER::extractToFileNamed( $name, @_ ); } } 1; FILE$74cc34c2/Archive/Zip/StringMember.pm #line 1 "/usr/local/share/perl/5.10.1/Archive/Zip/StringMember.pm" package Archive::Zip::StringMember; use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw( Archive::Zip::Member ); } use Archive::Zip qw( :CONSTANTS :ERROR_CODES ); # Create a new string member. Default is COMPRESSION_STORED. # Can take a ref to a string as well. sub _newFromString { my $class = shift; my $string = shift; my $name = shift; my $self = $class->new(@_); $self->contents($string); $self->fileName($name) if defined($name); # Set the file date to now $self->setLastModFileDateTimeFromUnix( time() ); $self->unixFileAttributes( $self->DEFAULT_FILE_PERMISSIONS ); return $self; } sub _become { my $self = shift; my $newClass = shift; return $self if ref($self) eq $newClass; delete( $self->{'contents'} ); return $self->SUPER::_become($newClass); } # Get or set my contents. Note that we do not call the superclass # version of this, because it calls us. sub contents { my $self = shift; my $string = shift; if ( defined($string) ) { $self->{'contents'} = pack( 'C0a*', ( ref($string) eq 'SCALAR' ) ? $$string : $string ); $self->{'uncompressedSize'} = $self->{'compressedSize'} = length( $self->{'contents'} ); $self->{'compressionMethod'} = COMPRESSION_STORED; } return $self->{'contents'}; } # Return bytes read. Note that first parameter is a ref to a buffer. # my $data; # my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize ); sub _readRawChunk { my ( $self, $dataRef, $chunkSize ) = @_; $$dataRef = substr( $self->contents(), $self->_readOffset(), $chunkSize ); return ( length($$dataRef), AZ_OK ); } 1; FILE%f1a3c82b/Archive/Zip/ZipFileMember.pm5#line 1 "/usr/local/share/perl/5.10.1/Archive/Zip/ZipFileMember.pm" package Archive::Zip::ZipFileMember; use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw ( Archive::Zip::FileMember ); } use Archive::Zip qw( :CONSTANTS :ERROR_CODES :PKZIP_CONSTANTS :UTILITY_METHODS ); # Create a new Archive::Zip::ZipFileMember # given a filename and optional open file handle # sub _newFromZipFile { my $class = shift; my $fh = shift; my $externalFileName = shift; my $possibleEocdOffset = shift; # normally 0 my $self = $class->new( 'crc32' => 0, 'diskNumberStart' => 0, 'localHeaderRelativeOffset' => 0, 'dataOffset' => 0, # localHeaderRelativeOffset + header length @_ ); $self->{'externalFileName'} = $externalFileName; $self->{'fh'} = $fh; $self->{'possibleEocdOffset'} = $possibleEocdOffset; return $self; } sub isDirectory { my $self = shift; return ( substr( $self->fileName, -1, 1 ) eq '/' and $self->uncompressedSize == 0 ); } # Seek to the beginning of the local header, just past the signature. # Verify that the local header signature is in fact correct. # Update the localHeaderRelativeOffset if necessary by adding the possibleEocdOffset. # Returns status. sub _seekToLocalHeader { my $self = shift; my $where = shift; # optional my $previousWhere = shift; # optional $where = $self->localHeaderRelativeOffset() unless defined($where); # avoid loop on certain corrupt files (from Julian Field) return _formatError("corrupt zip file") if defined($previousWhere) && $where == $previousWhere; my $status; my $signature; $status = $self->fh()->seek( $where, IO::Seekable::SEEK_SET ); return _ioError("seeking to local header") unless $status; ( $status, $signature ) = _readSignature( $self->fh(), $self->externalFileName(), LOCAL_FILE_HEADER_SIGNATURE ); return $status if $status == AZ_IO_ERROR; # retry with EOCD offset if any was given. if ( $status == AZ_FORMAT_ERROR && $self->{'possibleEocdOffset'} ) { $status = $self->_seekToLocalHeader( $self->localHeaderRelativeOffset() + $self->{'possibleEocdOffset'}, $where ); if ( $status == AZ_OK ) { $self->{'localHeaderRelativeOffset'} += $self->{'possibleEocdOffset'}; $self->{'possibleEocdOffset'} = 0; } } return $status; } # Because I'm going to delete the file handle, read the local file # header if the file handle is seekable. If it isn't, I assume that # I've already read the local header. # Return ( $status, $self ) sub _become { my $self = shift; my $newClass = shift; return $self if ref($self) eq $newClass; my $status = AZ_OK; if ( _isSeekable( $self->fh() ) ) { my $here = $self->fh()->tell(); $status = $self->_seekToLocalHeader(); $status = $self->_readLocalFileHeader() if $status == AZ_OK; $self->fh()->seek( $here, IO::Seekable::SEEK_SET ); return $status unless $status == AZ_OK; } delete( $self->{'eocdCrc32'} ); delete( $self->{'diskNumberStart'} ); delete( $self->{'localHeaderRelativeOffset'} ); delete( $self->{'dataOffset'} ); return $self->SUPER::_become($newClass); } sub diskNumberStart { shift->{'diskNumberStart'}; } sub localHeaderRelativeOffset { shift->{'localHeaderRelativeOffset'}; } sub dataOffset { shift->{'dataOffset'}; } # Skip local file header, updating only extra field stuff. # Assumes that fh is positioned before signature. sub _skipLocalFileHeader { my $self = shift; my $header; my $bytesRead = $self->fh()->read( $header, LOCAL_FILE_HEADER_LENGTH ); if ( $bytesRead != LOCAL_FILE_HEADER_LENGTH ) { return _ioError("reading local file header"); } my $fileNameLength; my $extraFieldLength; my $bitFlag; ( undef, # $self->{'versionNeededToExtract'}, $bitFlag, undef, # $self->{'compressionMethod'}, undef, # $self->{'lastModFileDateTime'}, undef, # $crc32, undef, # $compressedSize, undef, # $uncompressedSize, $fileNameLength, $extraFieldLength ) = unpack( LOCAL_FILE_HEADER_FORMAT, $header ); if ($fileNameLength) { $self->fh()->seek( $fileNameLength, IO::Seekable::SEEK_CUR ) or return _ioError("skipping local file name"); } if ($extraFieldLength) { $bytesRead = $self->fh()->read( $self->{'localExtraField'}, $extraFieldLength ); if ( $bytesRead != $extraFieldLength ) { return _ioError("reading local extra field"); } } $self->{'dataOffset'} = $self->fh()->tell(); if ( $bitFlag & GPBF_HAS_DATA_DESCRIPTOR_MASK ) { # Read the crc32, compressedSize, and uncompressedSize from the # extended data descriptor, which directly follows the compressed data. # # Skip over the compressed file data (assumes that EOCD compressedSize # was correct) $self->fh()->seek( $self->{'compressedSize'}, IO::Seekable::SEEK_CUR ) or return _ioError("seeking to extended local header"); # these values should be set correctly from before. my $oldCrc32 = $self->{'eocdCrc32'}; my $oldCompressedSize = $self->{'compressedSize'}; my $oldUncompressedSize = $self->{'uncompressedSize'}; my $status = $self->_readDataDescriptor(); return $status unless $status == AZ_OK; return _formatError( "CRC or size mismatch while skipping data descriptor") if ( $oldCrc32 != $self->{'crc32'} || $oldUncompressedSize != $self->{'uncompressedSize'} ); } return AZ_OK; } # Read from a local file header into myself. Returns AZ_OK if successful. # Assumes that fh is positioned after signature. # Note that crc32, compressedSize, and uncompressedSize will be 0 if # GPBF_HAS_DATA_DESCRIPTOR_MASK is set in the bitFlag. sub _readLocalFileHeader { my $self = shift; my $header; my $bytesRead = $self->fh()->read( $header, LOCAL_FILE_HEADER_LENGTH ); if ( $bytesRead != LOCAL_FILE_HEADER_LENGTH ) { return _ioError("reading local file header"); } my $fileNameLength; my $crc32; my $compressedSize; my $uncompressedSize; my $extraFieldLength; ( $self->{'versionNeededToExtract'}, $self->{'bitFlag'}, $self->{'compressionMethod'}, $self->{'lastModFileDateTime'}, $crc32, $compressedSize, $uncompressedSize, $fileNameLength, $extraFieldLength ) = unpack( LOCAL_FILE_HEADER_FORMAT, $header ); if ($fileNameLength) { my $fileName; $bytesRead = $self->fh()->read( $fileName, $fileNameLength ); if ( $bytesRead != $fileNameLength ) { return _ioError("reading local file name"); } $self->fileName($fileName); } if ($extraFieldLength) { $bytesRead = $self->fh()->read( $self->{'localExtraField'}, $extraFieldLength ); if ( $bytesRead != $extraFieldLength ) { return _ioError("reading local extra field"); } } $self->{'dataOffset'} = $self->fh()->tell(); if ( $self->hasDataDescriptor() ) { # Read the crc32, compressedSize, and uncompressedSize from the # extended data descriptor. # Skip over the compressed file data (assumes that EOCD compressedSize # was correct) $self->fh()->seek( $self->{'compressedSize'}, IO::Seekable::SEEK_CUR ) or return _ioError("seeking to extended local header"); my $status = $self->_readDataDescriptor(); return $status unless $status == AZ_OK; } else { return _formatError( "CRC or size mismatch after reading data descriptor") if ( $self->{'crc32'} != $crc32 || $self->{'uncompressedSize'} != $uncompressedSize ); } return AZ_OK; } # This will read the data descriptor, which is after the end of compressed file # data in members that that have GPBF_HAS_DATA_DESCRIPTOR_MASK set in their # bitFlag. # The only reliable way to find these is to rely on the EOCD compressedSize. # Assumes that file is positioned immediately after the compressed data. # Returns status; sets crc32, compressedSize, and uncompressedSize. sub _readDataDescriptor { my $self = shift; my $signatureData; my $header; my $crc32; my $compressedSize; my $uncompressedSize; my $bytesRead = $self->fh()->read( $signatureData, SIGNATURE_LENGTH ); return _ioError("reading header signature") if $bytesRead != SIGNATURE_LENGTH; my $signature = unpack( SIGNATURE_FORMAT, $signatureData ); # unfortunately, the signature appears to be optional. if ( $signature == DATA_DESCRIPTOR_SIGNATURE && ( $signature != $self->{'crc32'} ) ) { $bytesRead = $self->fh()->read( $header, DATA_DESCRIPTOR_LENGTH ); return _ioError("reading data descriptor") if $bytesRead != DATA_DESCRIPTOR_LENGTH; ( $crc32, $compressedSize, $uncompressedSize ) = unpack( DATA_DESCRIPTOR_FORMAT, $header ); } else { $bytesRead = $self->fh()->read( $header, DATA_DESCRIPTOR_LENGTH_NO_SIG ); return _ioError("reading data descriptor") if $bytesRead != DATA_DESCRIPTOR_LENGTH_NO_SIG; $crc32 = $signature; ( $compressedSize, $uncompressedSize ) = unpack( DATA_DESCRIPTOR_FORMAT_NO_SIG, $header ); } $self->{'eocdCrc32'} = $self->{'crc32'} unless defined( $self->{'eocdCrc32'} ); $self->{'crc32'} = $crc32; $self->{'compressedSize'} = $compressedSize; $self->{'uncompressedSize'} = $uncompressedSize; return AZ_OK; } # Read a Central Directory header. Return AZ_OK on success. # Assumes that fh is positioned right after the signature. sub _readCentralDirectoryFileHeader { my $self = shift; my $fh = $self->fh(); my $header = ''; my $bytesRead = $fh->read( $header, CENTRAL_DIRECTORY_FILE_HEADER_LENGTH ); if ( $bytesRead != CENTRAL_DIRECTORY_FILE_HEADER_LENGTH ) { return _ioError("reading central dir header"); } my ( $fileNameLength, $extraFieldLength, $fileCommentLength ); ( $self->{'versionMadeBy'}, $self->{'fileAttributeFormat'}, $self->{'versionNeededToExtract'}, $self->{'bitFlag'}, $self->{'compressionMethod'}, $self->{'lastModFileDateTime'}, $self->{'crc32'}, $self->{'compressedSize'}, $self->{'uncompressedSize'}, $fileNameLength, $extraFieldLength, $fileCommentLength, $self->{'diskNumberStart'}, $self->{'internalFileAttributes'}, $self->{'externalFileAttributes'}, $self->{'localHeaderRelativeOffset'} ) = unpack( CENTRAL_DIRECTORY_FILE_HEADER_FORMAT, $header ); $self->{'eocdCrc32'} = $self->{'crc32'}; if ($fileNameLength) { $bytesRead = $fh->read( $self->{'fileName'}, $fileNameLength ); if ( $bytesRead != $fileNameLength ) { _ioError("reading central dir filename"); } } if ($extraFieldLength) { $bytesRead = $fh->read( $self->{'cdExtraField'}, $extraFieldLength ); if ( $bytesRead != $extraFieldLength ) { return _ioError("reading central dir extra field"); } } if ($fileCommentLength) { $bytesRead = $fh->read( $self->{'fileComment'}, $fileCommentLength ); if ( $bytesRead != $fileCommentLength ) { return _ioError("reading central dir file comment"); } } # NK 10/21/04: added to avoid problems with manipulated headers if ( $self->{'uncompressedSize'} != $self->{'compressedSize'} and $self->{'compressionMethod'} == COMPRESSION_STORED ) { $self->{'uncompressedSize'} = $self->{'compressedSize'}; } $self->desiredCompressionMethod( $self->compressionMethod() ); return AZ_OK; } sub rewindData { my $self = shift; my $status = $self->SUPER::rewindData(@_); return $status unless $status == AZ_OK; return AZ_IO_ERROR unless $self->fh(); $self->fh()->clearerr(); # Seek to local file header. # The only reason that I'm doing this this way is that the extraField # length seems to be different between the CD header and the LF header. $status = $self->_seekToLocalHeader(); return $status unless $status == AZ_OK; # skip local file header $status = $self->_skipLocalFileHeader(); return $status unless $status == AZ_OK; # Seek to beginning of file data $self->fh()->seek( $self->dataOffset(), IO::Seekable::SEEK_SET ) or return _ioError("seeking to beginning of file data"); return AZ_OK; } # Return bytes read. Note that first parameter is a ref to a buffer. # my $data; # my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize ); sub _readRawChunk { my ( $self, $dataRef, $chunkSize ) = @_; return ( 0, AZ_OK ) unless $chunkSize; my $bytesRead = $self->fh()->read( $$dataRef, $chunkSize ) or return ( 0, _ioError("reading data") ); return ( $bytesRead, AZ_OK ); } 1; FILEd4cca2d1/Compress/Zlib.pm8#line 1 "/usr/local/share/perl/5.10.1/Compress/Zlib.pm" package Compress::Zlib; require 5.004 ; require Exporter; use Carp ; use IO::Handle ; use Scalar::Util qw(dualvar); use IO::Compress::Base::Common 2.030 ; use Compress::Raw::Zlib 2.030 ; use IO::Compress::Gzip 2.030 ; use IO::Uncompress::Gunzip 2.030 ; use strict ; use warnings ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); $VERSION = '2.030'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @ISA = qw(Exporter); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw( deflateInit inflateInit compress uncompress gzopen $gzerrno ); push @EXPORT, @Compress::Raw::Zlib::EXPORT ; @EXPORT_OK = qw(memGunzip memGzip zlib_version); %EXPORT_TAGS = ( ALL => \@EXPORT ); BEGIN { *zlib_version = \&Compress::Raw::Zlib::zlib_version; } use constant FLAG_APPEND => 1 ; use constant FLAG_CRC => 2 ; use constant FLAG_ADLER => 4 ; use constant FLAG_CONSUME_INPUT => 8 ; our (@my_z_errmsg); @my_z_errmsg = ( "need dictionary", # Z_NEED_DICT 2 "stream end", # Z_STREAM_END 1 "", # Z_OK 0 "file error", # Z_ERRNO (-1) "stream error", # Z_STREAM_ERROR (-2) "data error", # Z_DATA_ERROR (-3) "insufficient memory", # Z_MEM_ERROR (-4) "buffer error", # Z_BUF_ERROR (-5) "incompatible version",# Z_VERSION_ERROR(-6) ); sub _set_gzerr { my $value = shift ; if ($value == 0) { $Compress::Zlib::gzerrno = 0 ; } elsif ($value == Z_ERRNO() || $value > 2) { $Compress::Zlib::gzerrno = $! ; } else { $Compress::Zlib::gzerrno = dualvar($value+0, $my_z_errmsg[2 - $value]); } return $value ; } sub _set_gzerr_undef { _set_gzerr(@_); return undef; } sub _save_gzerr { my $gz = shift ; my $test_eof = shift ; my $value = $gz->errorNo() || 0 ; if ($test_eof) { #my $gz = $self->[0] ; # gzread uses Z_STREAM_END to denote a successful end $value = Z_STREAM_END() if $gz->eof() && $value == 0 ; } _set_gzerr($value) ; } sub gzopen($$) { my ($file, $mode) = @_ ; my $gz ; my %defOpts = (Level => Z_DEFAULT_COMPRESSION(), Strategy => Z_DEFAULT_STRATEGY(), ); my $writing ; $writing = ! ($mode =~ /r/i) ; $writing = ($mode =~ /[wa]/i) ; $defOpts{Level} = $1 if $mode =~ /(\d)/; $defOpts{Strategy} = Z_FILTERED() if $mode =~ /f/i; $defOpts{Strategy} = Z_HUFFMAN_ONLY() if $mode =~ /h/i; $defOpts{Append} = 1 if $mode =~ /a/i; my $infDef = $writing ? 'deflate' : 'inflate'; my @params = () ; croak "gzopen: file parameter is not a filehandle or filename" unless isaFilehandle $file || isaFilename $file || (ref $file && ref $file eq 'SCALAR'); return undef unless $mode =~ /[rwa]/i ; _set_gzerr(0) ; if ($writing) { $gz = new IO::Compress::Gzip($file, Minimal => 1, AutoClose => 1, %defOpts) or $Compress::Zlib::gzerrno = $IO::Compress::Gzip::GzipError; } else { $gz = new IO::Uncompress::Gunzip($file, Transparent => 1, Append => 0, AutoClose => 1, MultiStream => 1, Strict => 0) or $Compress::Zlib::gzerrno = $IO::Uncompress::Gunzip::GunzipError; } return undef if ! defined $gz ; bless [$gz, $infDef], 'Compress::Zlib::gzFile'; } sub Compress::Zlib::gzFile::gzread { my $self = shift ; return _set_gzerr(Z_STREAM_ERROR()) if $self->[1] ne 'inflate'; my $len = defined $_[1] ? $_[1] : 4096 ; if ($self->gzeof() || $len == 0) { # Zap the output buffer to match ver 1 behaviour. $_[0] = "" ; return 0 ; } my $gz = $self->[0] ; my $status = $gz->read($_[0], $len) ; _save_gzerr($gz, 1); return $status ; } sub Compress::Zlib::gzFile::gzreadline { my $self = shift ; my $gz = $self->[0] ; { # Maintain backward compatibility with 1.x behaviour # It didn't support $/, so this can't either. local $/ = "\n" ; $_[0] = $gz->getline() ; } _save_gzerr($gz, 1); return defined $_[0] ? length $_[0] : 0 ; } sub Compress::Zlib::gzFile::gzwrite { my $self = shift ; my $gz = $self->[0] ; return _set_gzerr(Z_STREAM_ERROR()) if $self->[1] ne 'deflate'; $] >= 5.008 and (utf8::downgrade($_[0], 1) or croak "Wide character in gzwrite"); my $status = $gz->write($_[0]) ; _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gztell { my $self = shift ; my $gz = $self->[0] ; my $status = $gz->tell() ; _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gzseek { my $self = shift ; my $offset = shift ; my $whence = shift ; my $gz = $self->[0] ; my $status ; eval { $status = $gz->seek($offset, $whence) ; }; if ($@) { my $error = $@; $error =~ s/^.*: /gzseek: /; $error =~ s/ at .* line \d+\s*$//; croak $error; } _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gzflush { my $self = shift ; my $f = shift ; my $gz = $self->[0] ; my $status = $gz->flush($f) ; my $err = _save_gzerr($gz); return $status ? 0 : $err; } sub Compress::Zlib::gzFile::gzclose { my $self = shift ; my $gz = $self->[0] ; my $status = $gz->close() ; my $err = _save_gzerr($gz); return $status ? 0 : $err; } sub Compress::Zlib::gzFile::gzeof { my $self = shift ; my $gz = $self->[0] ; return 0 if $self->[1] ne 'inflate'; my $status = $gz->eof() ; _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gzsetparams { my $self = shift ; croak "Usage: Compress::Zlib::gzFile::gzsetparams(file, level, strategy)" unless @_ eq 2 ; my $gz = $self->[0] ; my $level = shift ; my $strategy = shift; return _set_gzerr(Z_STREAM_ERROR()) if $self->[1] ne 'deflate'; my $status = *$gz->{Compress}->deflateParams(-Level => $level, -Strategy => $strategy); _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gzerror { my $self = shift ; my $gz = $self->[0] ; return $Compress::Zlib::gzerrno ; } sub compress($;$) { my ($x, $output, $err, $in) =('', '', '', '') ; if (ref $_[0] ) { $in = $_[0] ; croak "not a scalar reference" unless ref $in eq 'SCALAR' ; } else { $in = \$_[0] ; } $] >= 5.008 and (utf8::downgrade($$in, 1) or croak "Wide character in compress"); my $level = (@_ == 2 ? $_[1] : Z_DEFAULT_COMPRESSION() ); $x = new Compress::Raw::Zlib::Deflate -AppendOutput => 1, -Level => $level or return undef ; $err = $x->deflate($in, $output) ; return undef unless $err == Z_OK() ; $err = $x->flush($output) ; return undef unless $err == Z_OK() ; return $output ; } sub uncompress($) { my ($x, $output, $err, $in) =('', '', '', '') ; if (ref $_[0] ) { $in = $_[0] ; croak "not a scalar reference" unless ref $in eq 'SCALAR' ; } else { $in = \$_[0] ; } $] >= 5.008 and (utf8::downgrade($$in, 1) or croak "Wide character in uncompress"); $x = new Compress::Raw::Zlib::Inflate -ConsumeInput => 0 or return undef ; $err = $x->inflate($in, $output) ; return undef unless $err == Z_STREAM_END() ; return $output ; } sub deflateInit(@) { my ($got) = ParseParameters(0, { 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()], 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()], 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()], 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_ ) ; croak "Compress::Zlib::deflateInit: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $obj ; my $status = 0 ; ($obj, $status) = Compress::Raw::Zlib::_deflateInit(0, $got->value('Level'), $got->value('Method'), $got->value('WindowBits'), $got->value('MemLevel'), $got->value('Strategy'), $got->value('Bufsize'), $got->value('Dictionary')) ; my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldDeflate" : undef) ; return wantarray ? ($x, $status) : $x ; } sub inflateInit(@) { my ($got) = ParseParameters(0, { 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_) ; croak "Compress::Zlib::inflateInit: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $status = 0 ; my $obj ; ($obj, $status) = Compress::Raw::Zlib::_inflateInit(FLAG_CONSUME_INPUT, $got->value('WindowBits'), $got->value('Bufsize'), $got->value('Dictionary')) ; my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldInflate" : undef) ; wantarray ? ($x, $status) : $x ; } package Zlib::OldDeflate ; our (@ISA); @ISA = qw(Compress::Raw::Zlib::deflateStream); sub deflate { my $self = shift ; my $output ; my $status = $self->SUPER::deflate($_[0], $output) ; wantarray ? ($output, $status) : $output ; } sub flush { my $self = shift ; my $output ; my $flag = shift || Compress::Zlib::Z_FINISH(); my $status = $self->SUPER::flush($output, $flag) ; wantarray ? ($output, $status) : $output ; } package Zlib::OldInflate ; our (@ISA); @ISA = qw(Compress::Raw::Zlib::inflateStream); sub inflate { my $self = shift ; my $output ; my $status = $self->SUPER::inflate($_[0], $output) ; wantarray ? ($output, $status) : $output ; } package Compress::Zlib ; use IO::Compress::Gzip::Constants 2.030 ; sub memGzip($) { my $out; # if the deflation buffer isn't a reference, make it one my $string = (ref $_[0] ? $_[0] : \$_[0]) ; $] >= 5.008 and (utf8::downgrade($$string, 1) or croak "Wide character in memGzip"); _set_gzerr(0); if ( ! IO::Compress::Gzip::gzip($string, \$out, Minimal => 1) ) { $Compress::Zlib::gzerrno = $IO::Compress::Gzip::GzipError; return undef ; } return $out; } sub _removeGzipHeader($) { my $string = shift ; return Z_DATA_ERROR() if length($$string) < GZIP_MIN_HEADER_SIZE ; my ($magic1, $magic2, $method, $flags, $time, $xflags, $oscode) = unpack ('CCCCVCC', $$string); return Z_DATA_ERROR() unless $magic1 == GZIP_ID1 and $magic2 == GZIP_ID2 and $method == Z_DEFLATED() and !($flags & GZIP_FLG_RESERVED) ; substr($$string, 0, GZIP_MIN_HEADER_SIZE) = '' ; # skip extra field if ($flags & GZIP_FLG_FEXTRA) { return Z_DATA_ERROR() if length($$string) < GZIP_FEXTRA_HEADER_SIZE ; my ($extra_len) = unpack ('v', $$string); $extra_len += GZIP_FEXTRA_HEADER_SIZE; return Z_DATA_ERROR() if length($$string) < $extra_len ; substr($$string, 0, $extra_len) = ''; } # skip orig name if ($flags & GZIP_FLG_FNAME) { my $name_end = index ($$string, GZIP_NULL_BYTE); return Z_DATA_ERROR() if $name_end == -1 ; substr($$string, 0, $name_end + 1) = ''; } # skip comment if ($flags & GZIP_FLG_FCOMMENT) { my $comment_end = index ($$string, GZIP_NULL_BYTE); return Z_DATA_ERROR() if $comment_end == -1 ; substr($$string, 0, $comment_end + 1) = ''; } # skip header crc if ($flags & GZIP_FLG_FHCRC) { return Z_DATA_ERROR() if length ($$string) < GZIP_FHCRC_SIZE ; substr($$string, 0, GZIP_FHCRC_SIZE) = ''; } return Z_OK(); } sub _ret_gun_error { $Compress::Zlib::gzerrno = $IO::Uncompress::Gunzip::GunzipError; return undef; } sub memGunzip($) { # if the buffer isn't a reference, make it one my $string = (ref $_[0] ? $_[0] : \$_[0]); $] >= 5.008 and (utf8::downgrade($$string, 1) or croak "Wide character in memGunzip"); _set_gzerr(0); my $status = _removeGzipHeader($string) ; $status == Z_OK() or return _set_gzerr_undef($status); my $bufsize = length $$string > 4096 ? length $$string : 4096 ; my $x = new Compress::Raw::Zlib::Inflate({-WindowBits => - MAX_WBITS(), -Bufsize => $bufsize}) or return _ret_gun_error(); my $output = "" ; $status = $x->inflate($string, $output); if ( $status == Z_OK() ) { _set_gzerr(Z_DATA_ERROR()); return undef; } return _ret_gun_error() if ($status != Z_STREAM_END()); if (length $$string >= 8) { my ($crc, $len) = unpack ("VV", substr($$string, 0, 8)); substr($$string, 0, 8) = ''; return _set_gzerr_undef(Z_DATA_ERROR()) unless $len == length($output) and $crc == crc32($output); } else { $$string = ''; } return $output; } # Autoload methods go after __END__, and are processed by the autosplit program. 1; __END__ #line 1484 FILE8a020daf/File/GlobMapper.pm#line 1 "/usr/local/share/perl/5.10.1/File/GlobMapper.pm" package File::GlobMapper; use strict; use warnings; use Carp; our ($CSH_GLOB); BEGIN { if ($] < 5.006) { require File::BSDGlob; import File::BSDGlob qw(:glob) ; $CSH_GLOB = File::BSDGlob::GLOB_CSH() ; *globber = \&File::BSDGlob::csh_glob; } else { require File::Glob; import File::Glob qw(:glob) ; $CSH_GLOB = File::Glob::GLOB_CSH() ; #*globber = \&File::Glob::bsd_glob; *globber = \&File::Glob::csh_glob; } } our ($Error); our ($VERSION, @EXPORT_OK); $VERSION = '1.000'; @EXPORT_OK = qw( globmap ); our ($noPreBS, $metachars, $matchMetaRE, %mapping, %wildCount); $noPreBS = '(? '([^/]*)', '?' => '([^/])', '.' => '\.', '[' => '([', '(' => '(', ')' => ')', ); %wildCount = map { $_ => 1 } qw/ * ? . { ( [ /; sub globmap ($$;) { my $inputGlob = shift ; my $outputGlob = shift ; my $obj = new File::GlobMapper($inputGlob, $outputGlob, @_) or croak "globmap: $Error" ; return $obj->getFileMap(); } sub new { my $class = shift ; my $inputGlob = shift ; my $outputGlob = shift ; # TODO -- flags needs to default to whatever File::Glob does my $flags = shift || $CSH_GLOB ; #my $flags = shift ; $inputGlob =~ s/^\s*\<\s*//; $inputGlob =~ s/\s*\>\s*$//; $outputGlob =~ s/^\s*\<\s*//; $outputGlob =~ s/\s*\>\s*$//; my %object = ( InputGlob => $inputGlob, OutputGlob => $outputGlob, GlobFlags => $flags, Braces => 0, WildCount => 0, Pairs => [], Sigil => '#', ); my $self = bless \%object, ref($class) || $class ; $self->_parseInputGlob() or return undef ; $self->_parseOutputGlob() or return undef ; my @inputFiles = globber($self->{InputGlob}, $flags) ; if (GLOB_ERROR) { $Error = $!; return undef ; } #if (whatever) { my $missing = grep { ! -e $_ } @inputFiles ; if ($missing) { $Error = "$missing input files do not exist"; return undef ; } } $self->{InputFiles} = \@inputFiles ; $self->_getFiles() or return undef ; return $self; } sub _retError { my $string = shift ; $Error = "$string in input fileglob" ; return undef ; } sub _unmatched { my $delimeter = shift ; _retError("Unmatched $delimeter"); return undef ; } sub _parseBit { my $self = shift ; my $string = shift ; my $out = ''; my $depth = 0 ; while ($string =~ s/(.*?)$noPreBS(,|$matchMetaRE)//) { $out .= quotemeta($1) ; $out .= $mapping{$2} if defined $mapping{$2}; ++ $self->{WildCount} if $wildCount{$2} ; if ($2 eq ',') { return _unmatched "(" if $depth ; $out .= '|'; } elsif ($2 eq '(') { ++ $depth ; } elsif ($2 eq ')') { return _unmatched ")" if ! $depth ; -- $depth ; } elsif ($2 eq '[') { # TODO -- quotemeta & check no '/' # TODO -- check for \] & other \ within the [] $string =~ s#(.*?\])## or return _unmatched "[" ; $out .= "$1)" ; } elsif ($2 eq ']') { return _unmatched "]" ; } elsif ($2 eq '{' || $2 eq '}') { return _retError "Nested {} not allowed" ; } } $out .= quotemeta $string; return _unmatched "(" if $depth ; return $out ; } sub _parseInputGlob { my $self = shift ; my $string = $self->{InputGlob} ; my $inGlob = ''; # Multiple concatenated *'s don't make sense #$string =~ s#\*\*+#*# ; # TODO -- Allow space to delimit patterns? #my @strings = split /\s+/, $string ; #for my $str (@strings) my $out = ''; my $depth = 0 ; while ($string =~ s/(.*?)$noPreBS($matchMetaRE)//) { $out .= quotemeta($1) ; $out .= $mapping{$2} if defined $mapping{$2}; ++ $self->{WildCount} if $wildCount{$2} ; if ($2 eq '(') { ++ $depth ; } elsif ($2 eq ')') { return _unmatched ")" if ! $depth ; -- $depth ; } elsif ($2 eq '[') { # TODO -- quotemeta & check no '/' or '(' or ')' # TODO -- check for \] & other \ within the [] $string =~ s#(.*?\])## or return _unmatched "["; $out .= "$1)" ; } elsif ($2 eq ']') { return _unmatched "]" ; } elsif ($2 eq '}') { return _unmatched "}" ; } elsif ($2 eq '{') { # TODO -- check no '/' within the {} # TODO -- check for \} & other \ within the {} my $tmp ; unless ( $string =~ s/(.*?)$noPreBS\}//) { return _unmatched "{"; } #$string =~ s#(.*?)\}##; #my $alt = join '|', # map { quotemeta $_ } # split "$noPreBS,", $1 ; my $alt = $self->_parseBit($1); defined $alt or return 0 ; $out .= "($alt)" ; ++ $self->{Braces} ; } } return _unmatched "(" if $depth ; $out .= quotemeta $string ; $self->{InputGlob} =~ s/$noPreBS[\(\)]//g; $self->{InputPattern} = $out ; #print "# INPUT '$self->{InputGlob}' => '$out'\n"; return 1 ; } sub _parseOutputGlob { my $self = shift ; my $string = $self->{OutputGlob} ; my $maxwild = $self->{WildCount}; if ($self->{GlobFlags} & GLOB_TILDE) #if (1) { $string =~ s{ ^ ~ # find a leading tilde ( # save this in $1 [^/] # a non-slash character * # repeated 0 or more times (0 means me) ) }{ $1 ? (getpwnam($1))[7] : ( $ENV{HOME} || $ENV{LOGDIR} ) }ex; } # max #1 must be == to max no of '*' in input while ( $string =~ m/#(\d)/g ) { croak "Max wild is #$maxwild, you tried #$1" if $1 > $maxwild ; } my $noPreBS = '(?{OutputGlob}' => '$string'\n"; $self->{OutputPattern} = $string ; return 1 ; } sub _getFiles { my $self = shift ; my %outInMapping = (); my %inFiles = () ; foreach my $inFile (@{ $self->{InputFiles} }) { next if $inFiles{$inFile} ++ ; my $outFile = $inFile ; if ( $inFile =~ m/$self->{InputPattern}/ ) { no warnings 'uninitialized'; eval "\$outFile = $self->{OutputPattern};" ; if (defined $outInMapping{$outFile}) { $Error = "multiple input files map to one output file"; return undef ; } $outInMapping{$outFile} = $inFile; push @{ $self->{Pairs} }, [$inFile, $outFile]; } } return 1 ; } sub getFileMap { my $self = shift ; return $self->{Pairs} ; } sub getHash { my $self = shift ; return { map { $_->[0] => $_->[1] } @{ $self->{Pairs} } } ; } 1; __END__ #line 680FILE'4a4c9fe6/IO/Compress/Adapter/Deflate.pm C#line 1 "/usr/local/share/perl/5.10.1/IO/Compress/Adapter/Deflate.pm" package IO::Compress::Adapter::Deflate ; use strict; use warnings; use bytes; use IO::Compress::Base::Common 2.030 qw(:Status); use Compress::Raw::Zlib 2.030 qw(Z_OK Z_FINISH MAX_WBITS) ; our ($VERSION); $VERSION = '2.030'; sub mkCompObject { my $crc32 = shift ; my $adler32 = shift ; my $level = shift ; my $strategy = shift ; my ($def, $status) = new Compress::Raw::Zlib::Deflate -AppendOutput => 1, -CRC32 => $crc32, -ADLER32 => $adler32, -Level => $level, -Strategy => $strategy, -WindowBits => - MAX_WBITS; return (undef, "Cannot create Deflate object: $status", $status) if $status != Z_OK; return bless {'Def' => $def, 'Error' => '', } ; } sub compr { my $self = shift ; my $def = $self->{Def}; my $status = $def->deflate($_[0], $_[1]) ; $self->{ErrorNo} = $status; if ($status != Z_OK) { $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } return STATUS_OK; } sub flush { my $self = shift ; my $def = $self->{Def}; my $opt = $_[1] || Z_FINISH; my $status = $def->flush($_[0], $opt); $self->{ErrorNo} = $status; if ($status != Z_OK) { $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } return STATUS_OK; } sub close { my $self = shift ; my $def = $self->{Def}; $def->flush($_[0], Z_FINISH) if defined $def ; } sub reset { my $self = shift ; my $def = $self->{Def}; my $status = $def->deflateReset() ; $self->{ErrorNo} = $status; if ($status != Z_OK) { $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } return STATUS_OK; } sub deflateParams { my $self = shift ; my $def = $self->{Def}; my $status = $def->deflateParams(@_); $self->{ErrorNo} = $status; if ($status != Z_OK) { $self->{Error} = "deflateParams Error: $status"; return STATUS_ERROR; } return STATUS_OK; } #sub total_out #{ # my $self = shift ; # $self->{Def}->total_out(); #} # #sub total_in #{ # my $self = shift ; # $self->{Def}->total_in(); #} sub compressedBytes { my $self = shift ; $self->{Def}->compressedBytes(); } sub uncompressedBytes { my $self = shift ; $self->{Def}->uncompressedBytes(); } sub crc32 { my $self = shift ; $self->{Def}->crc32(); } sub adler32 { my $self = shift ; $self->{Def}->adler32(); } 1; __END__ FILE8e6c27a9/IO/Compress/Base.pmQK#line 1 "/usr/local/share/perl/5.10.1/IO/Compress/Base.pm" package IO::Compress::Base ; require 5.004 ; use strict ; use warnings; use IO::Compress::Base::Common 2.030 ; use IO::File ; use Scalar::Util qw(blessed readonly); #use File::Glob; #require Exporter ; use Carp ; use Symbol; use bytes; our (@ISA, $VERSION); @ISA = qw(Exporter IO::File); $VERSION = '2.030'; #Can't locate object method "SWASHNEW" via package "utf8" (perhaps you forgot to load "utf8"?) at .../ext/Compress-Zlib/Gzip/blib/lib/Compress/Zlib/Common.pm line 16. sub saveStatus { my $self = shift ; ${ *$self->{ErrorNo} } = shift() + 0 ; ${ *$self->{Error} } = '' ; return ${ *$self->{ErrorNo} } ; } sub saveErrorString { my $self = shift ; my $retval = shift ; ${ *$self->{Error} } = shift ; ${ *$self->{ErrorNo} } = shift() + 0 if @_ ; return $retval; } sub croakError { my $self = shift ; $self->saveErrorString(0, $_[0]); croak $_[0]; } sub closeError { my $self = shift ; my $retval = shift ; my $errno = *$self->{ErrorNo}; my $error = ${ *$self->{Error} }; $self->close(); *$self->{ErrorNo} = $errno ; ${ *$self->{Error} } = $error ; return $retval; } sub error { my $self = shift ; return ${ *$self->{Error} } ; } sub errorNo { my $self = shift ; return ${ *$self->{ErrorNo} } ; } sub writeAt { my $self = shift ; my $offset = shift; my $data = shift; if (defined *$self->{FH}) { my $here = tell(*$self->{FH}); return $self->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) if $here < 0 ; seek(*$self->{FH}, $offset, SEEK_SET) or return $self->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) ; defined *$self->{FH}->write($data, length $data) or return $self->saveErrorString(undef, $!, $!) ; seek(*$self->{FH}, $here, SEEK_SET) or return $self->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) ; } else { substr(${ *$self->{Buffer} }, $offset, length($data)) = $data ; } return 1; } sub output { my $self = shift ; my $data = shift ; my $last = shift ; return 1 if length $data == 0 && ! $last ; if ( *$self->{FilterEnvelope} ) { *_ = \$data; &{ *$self->{FilterEnvelope} }(); } if (length $data) { if ( defined *$self->{FH} ) { defined *$self->{FH}->write( $data, length $data ) or return $self->saveErrorString(0, $!, $!); } else { ${ *$self->{Buffer} } .= $data ; } } return 1; } sub getOneShotParams { return ( 'MultiStream' => [1, 1, Parse_boolean, 1], ); } sub checkParams { my $self = shift ; my $class = shift ; my $got = shift || IO::Compress::Base::Parameters::new(); $got->parse( { # Generic Parameters 'AutoClose' => [1, 1, Parse_boolean, 0], #'Encode' => [1, 1, Parse_any, undef], 'Strict' => [0, 1, Parse_boolean, 1], 'Append' => [1, 1, Parse_boolean, 0], 'BinModeIn' => [1, 1, Parse_boolean, 0], 'FilterEnvelope' => [1, 1, Parse_any, undef], $self->getExtraParams(), *$self->{OneShot} ? $self->getOneShotParams() : (), }, @_) or $self->croakError("${class}: $got->{Error}") ; return $got ; } sub _create { my $obj = shift; my $got = shift; *$obj->{Closed} = 1 ; my $class = ref $obj; $obj->croakError("$class: Missing Output parameter") if ! @_ && ! $got ; my $outValue = shift ; my $oneShot = 1 ; if (! $got) { $oneShot = 0 ; $got = $obj->checkParams($class, undef, @_) or return undef ; } my $lax = ! $got->value('Strict') ; my $outType = whatIsOutput($outValue); $obj->ckOutputParam($class, $outValue) or return undef ; if ($outType eq 'buffer') { *$obj->{Buffer} = $outValue; } else { my $buff = "" ; *$obj->{Buffer} = \$buff ; } # Merge implies Append my $merge = $got->value('Merge') ; my $appendOutput = $got->value('Append') || $merge ; *$obj->{Append} = $appendOutput; *$obj->{FilterEnvelope} = $got->value('FilterEnvelope') ; if ($merge) { # Switch off Merge mode if output file/buffer is empty/doesn't exist if (($outType eq 'buffer' && length $$outValue == 0 ) || ($outType ne 'buffer' && (! -e $outValue || (-w _ && -z _))) ) { $merge = 0 } } # If output is a file, check that it is writable #no warnings; #if ($outType eq 'filename' && -e $outValue && ! -w _) # { return $obj->saveErrorString(undef, "Output file '$outValue' is not writable" ) } if ($got->parsed('Encode')) { my $want_encoding = $got->value('Encode'); *$obj->{Encoding} = getEncoding($obj, $class, $want_encoding); } $obj->ckParams($got) or $obj->croakError("${class}: " . $obj->error()); $obj->saveStatus(STATUS_OK) ; my $status ; if (! $merge) { *$obj->{Compress} = $obj->mkComp($got) or return undef; *$obj->{UnCompSize} = new U64 ; *$obj->{CompSize} = new U64 ; if ( $outType eq 'buffer') { ${ *$obj->{Buffer} } = '' unless $appendOutput ; } else { if ($outType eq 'handle') { *$obj->{FH} = $outValue ; setBinModeOutput(*$obj->{FH}) ; $outValue->flush() ; *$obj->{Handle} = 1 ; if ($appendOutput) { seek(*$obj->{FH}, 0, SEEK_END) or return $obj->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) ; } } elsif ($outType eq 'filename') { no warnings; my $mode = '>' ; $mode = '>>' if $appendOutput; *$obj->{FH} = new IO::File "$mode $outValue" or return $obj->saveErrorString(undef, "cannot open file '$outValue': $!", $!) ; *$obj->{StdIO} = ($outValue eq '-'); setBinModeOutput(*$obj->{FH}) ; } } *$obj->{Header} = $obj->mkHeader($got) ; $obj->output( *$obj->{Header} ) or return undef; } else { *$obj->{Compress} = $obj->createMerge($outValue, $outType) or return undef; } *$obj->{Closed} = 0 ; *$obj->{AutoClose} = $got->value('AutoClose') ; *$obj->{Output} = $outValue; *$obj->{ClassName} = $class; *$obj->{Got} = $got; *$obj->{OneShot} = 0 ; return $obj ; } sub ckOutputParam { my $self = shift ; my $from = shift ; my $outType = whatIsOutput($_[0]); $self->croakError("$from: output parameter not a filename, filehandle or scalar ref") if ! $outType ; #$self->croakError("$from: output filename is undef or null string") #if $outType eq 'filename' && (! defined $_[0] || $_[0] eq '') ; $self->croakError("$from: output buffer is read-only") if $outType eq 'buffer' && readonly(${ $_[0] }); return 1; } sub _def { my $obj = shift ; my $class= (caller)[0] ; my $name = (caller(1))[3] ; $obj->croakError("$name: expected at least 1 parameters\n") unless @_ >= 1 ; my $input = shift ; my $haveOut = @_ ; my $output = shift ; my $x = new IO::Compress::Base::Validator($class, *$obj->{Error}, $name, $input, $output) or return undef ; push @_, $output if $haveOut && $x->{Hash}; *$obj->{OneShot} = 1 ; my $got = $obj->checkParams($name, undef, @_) or return undef ; $x->{Got} = $got ; # if ($x->{Hash}) # { # while (my($k, $v) = each %$input) # { # $v = \$input->{$k} # unless defined $v ; # # $obj->_singleTarget($x, 1, $k, $v, @_) # or return undef ; # } # # return keys %$input ; # } if ($x->{GlobMap}) { $x->{oneInput} = 1 ; foreach my $pair (@{ $x->{Pairs} }) { my ($from, $to) = @$pair ; $obj->_singleTarget($x, 1, $from, $to, @_) or return undef ; } return scalar @{ $x->{Pairs} } ; } if (! $x->{oneOutput} ) { my $inFile = ($x->{inType} eq 'filenames' || $x->{inType} eq 'filename'); $x->{inType} = $inFile ? 'filename' : 'buffer'; foreach my $in ($x->{oneInput} ? $input : @$input) { my $out ; $x->{oneInput} = 1 ; $obj->_singleTarget($x, $inFile, $in, \$out, @_) or return undef ; push @$output, \$out ; #if ($x->{outType} eq 'array') # { push @$output, \$out } #else # { $output->{$in} = \$out } } return 1 ; } # finally the 1 to 1 and n to 1 return $obj->_singleTarget($x, 1, $input, $output, @_); croak "should not be here" ; } sub _singleTarget { my $obj = shift ; my $x = shift ; my $inputIsFilename = shift; my $input = shift; if ($x->{oneInput}) { $obj->getFileInfo($x->{Got}, $input) if isaFilename($input) and $inputIsFilename ; my $z = $obj->_create($x->{Got}, @_) or return undef ; defined $z->_wr2($input, $inputIsFilename) or return $z->closeError(undef) ; return $z->close() ; } else { my $afterFirst = 0 ; my $inputIsFilename = ($x->{inType} ne 'array'); my $keep = $x->{Got}->clone(); #for my $element ( ($x->{inType} eq 'hash') ? keys %$input : @$input) for my $element ( @$input) { my $isFilename = isaFilename($element); if ( $afterFirst ++ ) { defined addInterStream($obj, $element, $isFilename) or return $obj->closeError(undef) ; } else { $obj->getFileInfo($x->{Got}, $element) if $isFilename; $obj->_create($x->{Got}, @_) or return undef ; } defined $obj->_wr2($element, $isFilename) or return $obj->closeError(undef) ; *$obj->{Got} = $keep->clone(); } return $obj->close() ; } } sub _wr2 { my $self = shift ; my $source = shift ; my $inputIsFilename = shift; my $input = $source ; if (! $inputIsFilename) { $input = \$source if ! ref $source; } if ( ref $input && ref $input eq 'SCALAR' ) { return $self->syswrite($input, @_) ; } if ( ! ref $input || isaFilehandle($input)) { my $isFilehandle = isaFilehandle($input) ; my $fh = $input ; if ( ! $isFilehandle ) { $fh = new IO::File "<$input" or return $self->saveErrorString(undef, "cannot open file '$input': $!", $!) ; } binmode $fh if *$self->{Got}->valueOrDefault('BinModeIn') ; my $status ; my $buff ; my $count = 0 ; while ($status = read($fh, $buff, 16 * 1024)) { $count += length $buff; defined $self->syswrite($buff, @_) or return undef ; } return $self->saveErrorString(undef, $!, $!) if ! defined $status ; if ( (!$isFilehandle || *$self->{AutoClose}) && $input ne '-') { $fh->close() or return undef ; } return $count ; } croak "Should not be here"; return undef; } sub addInterStream { my $self = shift ; my $input = shift ; my $inputIsFilename = shift ; if (*$self->{Got}->value('MultiStream')) { $self->getFileInfo(*$self->{Got}, $input) #if isaFilename($input) and $inputIsFilename ; if isaFilename($input) ; # TODO -- newStream needs to allow gzip/zip header to be modified return $self->newStream(); } elsif (*$self->{Got}->value('AutoFlush')) { #return $self->flush(Z_FULL_FLUSH); } return 1 ; } sub getFileInfo { } sub TIEHANDLE { return $_[0] if ref($_[0]); die "OOPS\n" ; } sub UNTIE { my $self = shift ; } sub DESTROY { my $self = shift ; local ($., $@, $!, $^E, $?); $self->close() ; # TODO - memory leak with 5.8.0 - this isn't called until # global destruction # %{ *$self } = () ; undef $self ; } sub filterUncompressed { } sub syswrite { my $self = shift ; my $buffer ; if (ref $_[0] ) { $self->croakError( *$self->{ClassName} . "::write: not a scalar reference" ) unless ref $_[0] eq 'SCALAR' ; $buffer = $_[0] ; } else { $buffer = \$_[0] ; } $] >= 5.008 and ( utf8::downgrade($$buffer, 1) or croak "Wide character in " . *$self->{ClassName} . "::write:"); if (@_ > 1) { my $slen = defined $$buffer ? length($$buffer) : 0; my $len = $slen; my $offset = 0; $len = $_[1] if $_[1] < $len; if (@_ > 2) { $offset = $_[2] || 0; $self->croakError(*$self->{ClassName} . "::write: offset outside string") if $offset > $slen; if ($offset < 0) { $offset += $slen; $self->croakError( *$self->{ClassName} . "::write: offset outside string") if $offset < 0; } my $rem = $slen - $offset; $len = $rem if $rem < $len; } $buffer = \substr($$buffer, $offset, $len) ; } return 0 if ! defined $$buffer || length $$buffer == 0 ; if (*$self->{Encoding}) { $$buffer = *$self->{Encoding}->encode($$buffer); } $self->filterUncompressed($buffer); my $buffer_length = defined $$buffer ? length($$buffer) : 0 ; *$self->{UnCompSize}->add($buffer_length) ; my $outBuffer=''; my $status = *$self->{Compress}->compr($buffer, $outBuffer) ; return $self->saveErrorString(undef, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo}) if $status == STATUS_ERROR; *$self->{CompSize}->add(length $outBuffer) ; $self->output($outBuffer) or return undef; return $buffer_length; } sub print { my $self = shift; #if (ref $self) { # $self = *$self{GLOB} ; #} if (defined $\) { if (defined $,) { defined $self->syswrite(join($,, @_) . $\); } else { defined $self->syswrite(join("", @_) . $\); } } else { if (defined $,) { defined $self->syswrite(join($,, @_)); } else { defined $self->syswrite(join("", @_)); } } } sub printf { my $self = shift; my $fmt = shift; defined $self->syswrite(sprintf($fmt, @_)); } sub flush { my $self = shift ; my $outBuffer=''; my $status = *$self->{Compress}->flush($outBuffer, @_) ; return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo}) if $status == STATUS_ERROR; if ( defined *$self->{FH} ) { *$self->{FH}->clearerr(); } *$self->{CompSize}->add(length $outBuffer) ; $self->output($outBuffer) or return 0; if ( defined *$self->{FH} ) { defined *$self->{FH}->flush() or return $self->saveErrorString(0, $!, $!); } return 1; } sub newStream { my $self = shift ; $self->_writeTrailer() or return 0 ; my $got = $self->checkParams('newStream', *$self->{Got}, @_) or return 0 ; $self->ckParams($got) or $self->croakError("newStream: $self->{Error}"); *$self->{Compress} = $self->mkComp($got) or return 0; *$self->{Header} = $self->mkHeader($got) ; $self->output(*$self->{Header} ) or return 0; *$self->{UnCompSize}->reset(); *$self->{CompSize}->reset(); return 1 ; } sub reset { my $self = shift ; return *$self->{Compress}->reset() ; } sub _writeTrailer { my $self = shift ; my $trailer = ''; my $status = *$self->{Compress}->close($trailer) ; return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo}) if $status == STATUS_ERROR; *$self->{CompSize}->add(length $trailer) ; $trailer .= $self->mkTrailer(); defined $trailer or return 0; return $self->output($trailer); } sub _writeFinalTrailer { my $self = shift ; return $self->output($self->mkFinalTrailer()); } sub close { my $self = shift ; return 1 if *$self->{Closed} || ! *$self->{Compress} ; *$self->{Closed} = 1 ; untie *$self if $] >= 5.008 ; $self->_writeTrailer() or return 0 ; $self->_writeFinalTrailer() or return 0 ; $self->output( "", 1 ) or return 0; if (defined *$self->{FH}) { #if (! *$self->{Handle} || *$self->{AutoClose}) { if ((! *$self->{Handle} || *$self->{AutoClose}) && ! *$self->{StdIO}) { $! = 0 ; *$self->{FH}->close() or return $self->saveErrorString(0, $!, $!); } delete *$self->{FH} ; # This delete can set $! in older Perls, so reset the errno $! = 0 ; } return 1; } #sub total_in #sub total_out #sub msg # #sub crc #{ # my $self = shift ; # return *$self->{Compress}->crc32() ; #} # #sub msg #{ # my $self = shift ; # return *$self->{Compress}->msg() ; #} # #sub dict_adler #{ # my $self = shift ; # return *$self->{Compress}->dict_adler() ; #} # #sub get_Level #{ # my $self = shift ; # return *$self->{Compress}->get_Level() ; #} # #sub get_Strategy #{ # my $self = shift ; # return *$self->{Compress}->get_Strategy() ; #} sub tell { my $self = shift ; return *$self->{UnCompSize}->get32bit() ; } sub eof { my $self = shift ; return *$self->{Closed} ; } sub seek { my $self = shift ; my $position = shift; my $whence = shift ; my $here = $self->tell() ; my $target = 0 ; #use IO::Handle qw(SEEK_SET SEEK_CUR SEEK_END); use IO::Handle ; if ($whence == IO::Handle::SEEK_SET) { $target = $position ; } elsif ($whence == IO::Handle::SEEK_CUR || $whence == IO::Handle::SEEK_END) { $target = $here + $position ; } else { $self->croakError(*$self->{ClassName} . "::seek: unknown value, $whence, for whence parameter"); } # short circuit if seeking to current offset return 1 if $target == $here ; # Outlaw any attempt to seek backwards $self->croakError(*$self->{ClassName} . "::seek: cannot seek backwards") if $target < $here ; # Walk the file to the new offset my $offset = $target - $here ; my $buffer ; defined $self->syswrite("\x00" x $offset) or return 0; return 1 ; } sub binmode { 1; # my $self = shift ; # return defined *$self->{FH} # ? binmode *$self->{FH} # : 1 ; } sub fileno { my $self = shift ; return defined *$self->{FH} ? *$self->{FH}->fileno() : undef ; } sub opened { my $self = shift ; return ! *$self->{Closed} ; } sub autoflush { my $self = shift ; return defined *$self->{FH} ? *$self->{FH}->autoflush(@_) : undef ; } sub input_line_number { return undef ; } sub _notAvailable { my $name = shift ; return sub { croak "$name Not Available: File opened only for output" ; } ; } *read = _notAvailable('read'); *READ = _notAvailable('read'); *readline = _notAvailable('readline'); *READLINE = _notAvailable('readline'); *getc = _notAvailable('getc'); *GETC = _notAvailable('getc'); *FILENO = \&fileno; *PRINT = \&print; *PRINTF = \&printf; *WRITE = \&syswrite; *write = \&syswrite; *SEEK = \&seek; *TELL = \&tell; *EOF = \&eof; *CLOSE = \&close; *BINMODE = \&binmode; #*sysread = \&_notAvailable; #*syswrite = \&_write; 1; __END__ #line 982 FILE#b8bca094/IO/Compress/Base/Common.pmT#line 1 "/usr/local/share/perl/5.10.1/IO/Compress/Base/Common.pm" package IO::Compress::Base::Common; use strict ; use warnings; use bytes; use Carp; use Scalar::Util qw(blessed readonly); use File::GlobMapper; require Exporter; our ($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $HAS_ENCODE); @ISA = qw(Exporter); $VERSION = '2.030'; @EXPORT = qw( isaFilehandle isaFilename whatIsInput whatIsOutput isaFileGlobString cleanFileGlobString oneTarget setBinModeInput setBinModeOutput ckInOutParams createSelfTiedObject getEncoding WANT_CODE WANT_EXT WANT_UNDEF WANT_HASH STATUS_OK STATUS_ENDSTREAM STATUS_EOF STATUS_ERROR ); %EXPORT_TAGS = ( Status => [qw( STATUS_OK STATUS_ENDSTREAM STATUS_EOF STATUS_ERROR )]); use constant STATUS_OK => 0; use constant STATUS_ENDSTREAM => 1; use constant STATUS_EOF => 2; use constant STATUS_ERROR => -1; sub hasEncode() { if (! defined $HAS_ENCODE) { eval { require Encode; Encode->import(); }; $HAS_ENCODE = $@ ? 0 : 1 ; } return $HAS_ENCODE; } sub getEncoding($$$) { my $obj = shift; my $class = shift ; my $want_encoding = shift ; $obj->croakError("$class: Encode module needed to use -Encode") if ! hasEncode(); my $encoding = Encode::find_encoding($want_encoding); $obj->croakError("$class: Encoding '$want_encoding' is not available") if ! $encoding; return $encoding; } our ($needBinmode); $needBinmode = ($^O eq 'MSWin32' || ($] >= 5.006 && eval ' ${^UNICODE} || ${^UTF8LOCALE} ')) ? 1 : 1 ; sub setBinModeInput($) { my $handle = shift ; binmode $handle if $needBinmode; } sub setBinModeOutput($) { my $handle = shift ; binmode $handle if $needBinmode; } sub isaFilehandle($) { use utf8; # Pragma needed to keep Perl 5.6.0 happy return (defined $_[0] and (UNIVERSAL::isa($_[0],'GLOB') or UNIVERSAL::isa($_[0],'IO::Handle') or UNIVERSAL::isa(\$_[0],'GLOB')) ) } sub isaFilename($) { return (defined $_[0] and ! ref $_[0] and UNIVERSAL::isa(\$_[0], 'SCALAR')); } sub isaFileGlobString { return defined $_[0] && $_[0] =~ /^<.*>$/; } sub cleanFileGlobString { my $string = shift ; $string =~ s/^\s*<\s*(.*)\s*>\s*$/$1/; return $string; } use constant WANT_CODE => 1 ; use constant WANT_EXT => 2 ; use constant WANT_UNDEF => 4 ; #use constant WANT_HASH => 8 ; use constant WANT_HASH => 0 ; sub whatIsInput($;$) { my $got = whatIs(@_); if (defined $got && $got eq 'filename' && defined $_[0] && $_[0] eq '-') { #use IO::File; $got = 'handle'; $_[0] = *STDIN; #$_[0] = new IO::File("<-"); } return $got; } sub whatIsOutput($;$) { my $got = whatIs(@_); if (defined $got && $got eq 'filename' && defined $_[0] && $_[0] eq '-') { $got = 'handle'; $_[0] = *STDOUT; #$_[0] = new IO::File(">-"); } return $got; } sub whatIs ($;$) { return 'handle' if isaFilehandle($_[0]); my $wantCode = defined $_[1] && $_[1] & WANT_CODE ; my $extended = defined $_[1] && $_[1] & WANT_EXT ; my $undef = defined $_[1] && $_[1] & WANT_UNDEF ; my $hash = defined $_[1] && $_[1] & WANT_HASH ; return 'undef' if ! defined $_[0] && $undef ; if (ref $_[0]) { return '' if blessed($_[0]); # is an object #return '' if UNIVERSAL::isa($_[0], 'UNIVERSAL'); # is an object return 'buffer' if UNIVERSAL::isa($_[0], 'SCALAR'); return 'array' if UNIVERSAL::isa($_[0], 'ARRAY') && $extended ; return 'hash' if UNIVERSAL::isa($_[0], 'HASH') && $hash ; return 'code' if UNIVERSAL::isa($_[0], 'CODE') && $wantCode ; return ''; } return 'fileglob' if $extended && isaFileGlobString($_[0]); return 'filename'; } sub oneTarget { return $_[0] =~ /^(code|handle|buffer|filename)$/; } sub IO::Compress::Base::Validator::new { my $class = shift ; my $Class = shift ; my $error_ref = shift ; my $reportClass = shift ; my %data = (Class => $Class, Error => $error_ref, reportClass => $reportClass, ) ; my $obj = bless \%data, $class ; local $Carp::CarpLevel = 1; my $inType = $data{inType} = whatIsInput($_[0], WANT_EXT|WANT_HASH); my $outType = $data{outType} = whatIsOutput($_[1], WANT_EXT|WANT_HASH); my $oneInput = $data{oneInput} = oneTarget($inType); my $oneOutput = $data{oneOutput} = oneTarget($outType); if (! $inType) { $obj->croakError("$reportClass: illegal input parameter") ; #return undef ; } # if ($inType eq 'hash') # { # $obj->{Hash} = 1 ; # $obj->{oneInput} = 1 ; # return $obj->validateHash($_[0]); # } if (! $outType) { $obj->croakError("$reportClass: illegal output parameter") ; #return undef ; } if ($inType ne 'fileglob' && $outType eq 'fileglob') { $obj->croakError("Need input fileglob for outout fileglob"); } # if ($inType ne 'fileglob' && $outType eq 'hash' && $inType ne 'filename' ) # { # $obj->croakError("input must ne filename or fileglob when output is a hash"); # } if ($inType eq 'fileglob' && $outType eq 'fileglob') { $data{GlobMap} = 1 ; $data{inType} = $data{outType} = 'filename'; my $mapper = new File::GlobMapper($_[0], $_[1]); if ( ! $mapper ) { return $obj->saveErrorString($File::GlobMapper::Error) ; } $data{Pairs} = $mapper->getFileMap(); return $obj; } $obj->croakError("$reportClass: input and output $inType are identical") if $inType eq $outType && $_[0] eq $_[1] && $_[0] ne '-' ; if ($inType eq 'fileglob') # && $outType ne 'fileglob' { my $glob = cleanFileGlobString($_[0]); my @inputs = glob($glob); if (@inputs == 0) { # TODO -- legal or die? die "globmap matched zero file -- legal or die???" ; } elsif (@inputs == 1) { $obj->validateInputFilenames($inputs[0]) or return undef; $_[0] = $inputs[0] ; $data{inType} = 'filename' ; $data{oneInput} = 1; } else { $obj->validateInputFilenames(@inputs) or return undef; $_[0] = [ @inputs ] ; $data{inType} = 'filenames' ; } } elsif ($inType eq 'filename') { $obj->validateInputFilenames($_[0]) or return undef; } elsif ($inType eq 'array') { $data{inType} = 'filenames' ; $obj->validateInputArray($_[0]) or return undef ; } return $obj->saveErrorString("$reportClass: output buffer is read-only") if $outType eq 'buffer' && readonly(${ $_[1] }); if ($outType eq 'filename' ) { $obj->croakError("$reportClass: output filename is undef or null string") if ! defined $_[1] || $_[1] eq '' ; if (-e $_[1]) { if (-d _ ) { return $obj->saveErrorString("output file '$_[1]' is a directory"); } } } return $obj ; } sub IO::Compress::Base::Validator::saveErrorString { my $self = shift ; ${ $self->{Error} } = shift ; return undef; } sub IO::Compress::Base::Validator::croakError { my $self = shift ; $self->saveErrorString($_[0]); croak $_[0]; } sub IO::Compress::Base::Validator::validateInputFilenames { my $self = shift ; foreach my $filename (@_) { $self->croakError("$self->{reportClass}: input filename is undef or null string") if ! defined $filename || $filename eq '' ; next if $filename eq '-'; if (! -e $filename ) { return $self->saveErrorString("input file '$filename' does not exist"); } if (-d _ ) { return $self->saveErrorString("input file '$filename' is a directory"); } if (! -r _ ) { return $self->saveErrorString("cannot open file '$filename': $!"); } } return 1 ; } sub IO::Compress::Base::Validator::validateInputArray { my $self = shift ; if ( @{ $_[0] } == 0 ) { return $self->saveErrorString("empty array reference") ; } foreach my $element ( @{ $_[0] } ) { my $inType = whatIsInput($element); if (! $inType) { $self->croakError("unknown input parameter") ; } elsif($inType eq 'filename') { $self->validateInputFilenames($element) or return undef ; } else { $self->croakError("not a filename") ; } } return 1 ; } #sub IO::Compress::Base::Validator::validateHash #{ # my $self = shift ; # my $href = shift ; # # while (my($k, $v) = each %$href) # { # my $ktype = whatIsInput($k); # my $vtype = whatIsOutput($v, WANT_EXT|WANT_UNDEF) ; # # if ($ktype ne 'filename') # { # return $self->saveErrorString("hash key not filename") ; # } # # my %valid = map { $_ => 1 } qw(filename buffer array undef handle) ; # if (! $valid{$vtype}) # { # return $self->saveErrorString("hash value not ok") ; # } # } # # return $self ; #} sub createSelfTiedObject { my $class = shift || (caller)[0] ; my $error_ref = shift ; my $obj = bless Symbol::gensym(), ref($class) || $class; tie *$obj, $obj if $] >= 5.005; *$obj->{Closed} = 1 ; $$error_ref = ''; *$obj->{Error} = $error_ref ; my $errno = 0 ; *$obj->{ErrorNo} = \$errno ; return $obj; } #package Parse::Parameters ; # # #require Exporter; #our ($VERSION, @ISA, @EXPORT); #$VERSION = '2.000_08'; #@ISA = qw(Exporter); $EXPORT_TAGS{Parse} = [qw( ParseParameters Parse_any Parse_unsigned Parse_signed Parse_boolean Parse_custom Parse_string Parse_multiple Parse_writable_scalar ) ]; push @EXPORT, @{ $EXPORT_TAGS{Parse} } ; use constant Parse_any => 0x01; use constant Parse_unsigned => 0x02; use constant Parse_signed => 0x04; use constant Parse_boolean => 0x08; use constant Parse_string => 0x10; use constant Parse_custom => 0x12; #use constant Parse_store_ref => 0x100 ; use constant Parse_multiple => 0x100 ; use constant Parse_writable => 0x200 ; use constant Parse_writable_scalar => 0x400 | Parse_writable ; use constant OFF_PARSED => 0 ; use constant OFF_TYPE => 1 ; use constant OFF_DEFAULT => 2 ; use constant OFF_FIXED => 3 ; use constant OFF_FIRST_ONLY => 4 ; use constant OFF_STICKY => 5 ; sub ParseParameters { my $level = shift || 0 ; my $sub = (caller($level + 1))[3] ; local $Carp::CarpLevel = 1 ; return $_[1] if @_ == 2 && defined $_[1] && UNIVERSAL::isa($_[1], "IO::Compress::Base::Parameters"); my $p = new IO::Compress::Base::Parameters() ; $p->parse(@_) or croak "$sub: $p->{Error}" ; return $p; } #package IO::Compress::Base::Parameters; use strict; use warnings; use Carp; sub IO::Compress::Base::Parameters::new { my $class = shift ; my $obj = { Error => '', Got => {}, } ; #return bless $obj, ref($class) || $class || __PACKAGE__ ; return bless $obj, 'IO::Compress::Base::Parameters' ; } sub IO::Compress::Base::Parameters::setError { my $self = shift ; my $error = shift ; my $retval = @_ ? shift : undef ; $self->{Error} = $error ; return $retval; } #sub getError #{ # my $self = shift ; # return $self->{Error} ; #} sub IO::Compress::Base::Parameters::parse { my $self = shift ; my $default = shift ; my $got = $self->{Got} ; my $firstTime = keys %{ $got } == 0 ; my $other; my (@Bad) ; my @entered = () ; # Allow the options to be passed as a hash reference or # as the complete hash. if (@_ == 0) { @entered = () ; } elsif (@_ == 1) { my $href = $_[0] ; return $self->setError("Expected even number of parameters, got 1") if ! defined $href or ! ref $href or ref $href ne "HASH" ; foreach my $key (keys %$href) { push @entered, $key ; push @entered, \$href->{$key} ; } } else { my $count = @_; return $self->setError("Expected even number of parameters, got $count") if $count % 2 != 0 ; for my $i (0.. $count / 2 - 1) { if ($_[2 * $i] eq '__xxx__') { $other = $_[2 * $i + 1] ; } else { push @entered, $_[2 * $i] ; push @entered, \$_[2 * $i + 1] ; } } } while (my ($key, $v) = each %$default) { croak "need 4 params [@$v]" if @$v != 4 ; my ($first_only, $sticky, $type, $value) = @$v ; my $x ; $self->_checkType($key, \$value, $type, 0, \$x) or return undef ; $key = lc $key; if ($firstTime || ! $sticky) { $x = [] if $type & Parse_multiple; $got->{$key} = [0, $type, $value, $x, $first_only, $sticky] ; } $got->{$key}[OFF_PARSED] = 0 ; } my %parsed = (); if ($other) { for my $key (keys %$default) { my $canonkey = lc $key; if ($other->parsed($canonkey)) { my $value = $other->value($canonkey); #print "SET '$canonkey' to $value [$$value]\n"; ++ $parsed{$canonkey}; $got->{$canonkey}[OFF_PARSED] = 1; $got->{$canonkey}[OFF_DEFAULT] = $value; $got->{$canonkey}[OFF_FIXED] = $value; } } } for my $i (0.. @entered / 2 - 1) { my $key = $entered[2* $i] ; my $value = $entered[2* $i+1] ; #print "Key [$key] Value [$value]" ; #print defined $$value ? "[$$value]\n" : "[undef]\n"; $key =~ s/^-// ; my $canonkey = lc $key; if ($got->{$canonkey} && ($firstTime || ! $got->{$canonkey}[OFF_FIRST_ONLY] )) { my $type = $got->{$canonkey}[OFF_TYPE] ; my $parsed = $parsed{$canonkey}; ++ $parsed{$canonkey}; return $self->setError("Muliple instances of '$key' found") if $parsed && $type & Parse_multiple == 0 ; my $s ; $self->_checkType($key, $value, $type, 1, \$s) or return undef ; $value = $$value ; if ($type & Parse_multiple) { $got->{$canonkey}[OFF_PARSED] = 1; push @{ $got->{$canonkey}[OFF_FIXED] }, $s ; } else { $got->{$canonkey} = [1, $type, $value, $s] ; } } else { push (@Bad, $key) } } if (@Bad) { my ($bad) = join(", ", @Bad) ; return $self->setError("unknown key value(s) $bad") ; } return 1; } sub IO::Compress::Base::Parameters::_checkType { my $self = shift ; my $key = shift ; my $value = shift ; my $type = shift ; my $validate = shift ; my $output = shift; #local $Carp::CarpLevel = $level ; #print "PARSE $type $key $value $validate $sub\n" ; if ($type & Parse_writable_scalar) { return $self->setError("Parameter '$key' not writable") if $validate && readonly $$value ; if (ref $$value) { return $self->setError("Parameter '$key' not a scalar reference") if $validate && ref $$value ne 'SCALAR' ; $$output = $$value ; } else { return $self->setError("Parameter '$key' not a scalar") if $validate && ref $value ne 'SCALAR' ; $$output = $value ; } return 1; } # if ($type & Parse_store_ref) # { # #$value = $$value # # if ref ${ $value } ; # # $$output = $value ; # return 1; # } $value = $$value ; if ($type & Parse_any) { $$output = $value ; return 1; } elsif ($type & Parse_unsigned) { return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'") if $validate && ! defined $value ; return $self->setError("Parameter '$key' must be an unsigned int, got '$value'") if $validate && $value !~ /^\d+$/; $$output = defined $value ? $value : 0 ; return 1; } elsif ($type & Parse_signed) { return $self->setError("Parameter '$key' must be a signed int, got 'undef'") if $validate && ! defined $value ; return $self->setError("Parameter '$key' must be a signed int, got '$value'") if $validate && $value !~ /^-?\d+$/; $$output = defined $value ? $value : 0 ; return 1 ; } elsif ($type & Parse_boolean) { return $self->setError("Parameter '$key' must be an int, got '$value'") if $validate && defined $value && $value !~ /^\d*$/; $$output = defined $value ? $value != 0 : 0 ; return 1; } elsif ($type & Parse_string) { $$output = defined $value ? $value : "" ; return 1; } $$output = $value ; return 1; } sub IO::Compress::Base::Parameters::parsed { my $self = shift ; my $name = shift ; return $self->{Got}{lc $name}[OFF_PARSED] ; } sub IO::Compress::Base::Parameters::value { my $self = shift ; my $name = shift ; if (@_) { $self->{Got}{lc $name}[OFF_PARSED] = 1; $self->{Got}{lc $name}[OFF_DEFAULT] = $_[0] ; $self->{Got}{lc $name}[OFF_FIXED] = $_[0] ; } return $self->{Got}{lc $name}[OFF_FIXED] ; } sub IO::Compress::Base::Parameters::valueOrDefault { my $self = shift ; my $name = shift ; my $default = shift ; my $value = $self->{Got}{lc $name}[OFF_DEFAULT] ; return $value if defined $value ; return $default ; } sub IO::Compress::Base::Parameters::wantValue { my $self = shift ; my $name = shift ; return defined $self->{Got}{lc $name}[OFF_DEFAULT] ; } sub IO::Compress::Base::Parameters::clone { my $self = shift ; my $obj = { }; my %got ; while (my ($k, $v) = each %{ $self->{Got} }) { $got{$k} = [ @$v ]; } $obj->{Error} = $self->{Error}; $obj->{Got} = \%got ; return bless $obj, 'IO::Compress::Base::Parameters' ; } package U64; use constant MAX32 => 0xFFFFFFFF ; use constant HI_1 => MAX32 + 1 ; use constant LOW => 0 ; use constant HIGH => 1; sub new { my $class = shift ; my $high = 0 ; my $low = 0 ; if (@_ == 2) { $high = shift ; $low = shift ; } elsif (@_ == 1) { $low = shift ; } bless [$low, $high], $class; } sub newUnpack_V64 { my $string = shift; my ($low, $hi) = unpack "V V", $string ; bless [ $low, $hi ], "U64"; } sub newUnpack_V32 { my $string = shift; my $low = unpack "V", $string ; bless [ $low, 0 ], "U64"; } sub reset { my $self = shift; $self->[HIGH] = $self->[LOW] = 0; } sub clone { my $self = shift; bless [ @$self ], ref $self ; } sub getHigh { my $self = shift; return $self->[HIGH]; } sub getLow { my $self = shift; return $self->[LOW]; } sub get32bit { my $self = shift; return $self->[LOW]; } sub get64bit { my $self = shift; # Not using << here because the result will still be # a 32-bit value on systems where int size is 32-bits return $self->[HIGH] * HI_1 + $self->[LOW]; } sub add { my $self = shift; my $value = shift; if (ref $value eq 'U64') { $self->[HIGH] += $value->[HIGH] ; $value = $value->[LOW]; } my $available = MAX32 - $self->[LOW] ; if ($value > $available) { ++ $self->[HIGH] ; $self->[LOW] = $value - $available - 1; } else { $self->[LOW] += $value ; } } sub equal { my $self = shift; my $other = shift; return $self->[LOW] == $other->[LOW] && $self->[HIGH] == $other->[HIGH] ; } sub is64bit { my $self = shift; return $self->[HIGH] > 0 ; } sub getPacked_V64 { my $self = shift; return pack "V V", @$self ; } sub getPacked_V32 { my $self = shift; return pack "V", $self->[LOW] ; } sub pack_V64 { my $low = shift; return pack "V V", $low, 0; } package IO::Compress::Base::Common; 1; FILE97206921/IO/Compress/Gzip.pm#line 1 "/usr/local/share/perl/5.10.1/IO/Compress/Gzip.pm" package IO::Compress::Gzip ; require 5.004 ; use strict ; use warnings; use bytes; use IO::Compress::RawDeflate 2.030 ; use Compress::Raw::Zlib 2.030 ; use IO::Compress::Base::Common 2.030 qw(:Status :Parse createSelfTiedObject); use IO::Compress::Gzip::Constants 2.030 ; use IO::Compress::Zlib::Extra 2.030 ; BEGIN { if (defined &utf8::downgrade ) { *noUTF8 = \&utf8::downgrade } else { *noUTF8 = sub {} } } require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $GzipError); $VERSION = '2.030'; $GzipError = '' ; @ISA = qw(Exporter IO::Compress::RawDeflate); @EXPORT_OK = qw( $GzipError gzip ) ; %EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); sub new { my $class = shift ; my $obj = createSelfTiedObject($class, \$GzipError); $obj->_create(undef, @_); } sub gzip { my $obj = createSelfTiedObject(undef, \$GzipError); return $obj->_def(@_); } #sub newHeader #{ # my $self = shift ; # #return GZIP_MINIMUM_HEADER ; # return $self->mkHeader(*$self->{Got}); #} sub getExtraParams { my $self = shift ; return ( # zlib behaviour $self->getZlibParams(), # Gzip header fields 'Minimal' => [0, 1, Parse_boolean, 0], 'Comment' => [0, 1, Parse_any, undef], 'Name' => [0, 1, Parse_any, undef], 'Time' => [0, 1, Parse_any, undef], 'TextFlag' => [0, 1, Parse_boolean, 0], 'HeaderCRC' => [0, 1, Parse_boolean, 0], 'OS_Code' => [0, 1, Parse_unsigned, $Compress::Raw::Zlib::gzip_os_code], 'ExtraField'=> [0, 1, Parse_any, undef], 'ExtraFlags'=> [0, 1, Parse_any, undef], ); } sub ckParams { my $self = shift ; my $got = shift ; # gzip always needs crc32 $got->value('CRC32' => 1); return 1 if $got->value('Merge') ; my $strict = $got->value('Strict') ; { if (! $got->parsed('Time') ) { # Modification time defaults to now. $got->value('Time' => time) ; } # Check that the Name & Comment don't have embedded NULLs # Also check that they only contain ISO 8859-1 chars. if ($got->parsed('Name') && defined $got->value('Name')) { my $name = $got->value('Name'); return $self->saveErrorString(undef, "Null Character found in Name", Z_DATA_ERROR) if $strict && $name =~ /\x00/ ; return $self->saveErrorString(undef, "Non ISO 8859-1 Character found in Name", Z_DATA_ERROR) if $strict && $name =~ /$GZIP_FNAME_INVALID_CHAR_RE/o ; } if ($got->parsed('Comment') && defined $got->value('Comment')) { my $comment = $got->value('Comment'); return $self->saveErrorString(undef, "Null Character found in Comment", Z_DATA_ERROR) if $strict && $comment =~ /\x00/ ; return $self->saveErrorString(undef, "Non ISO 8859-1 Character found in Comment", Z_DATA_ERROR) if $strict && $comment =~ /$GZIP_FCOMMENT_INVALID_CHAR_RE/o; } if ($got->parsed('OS_Code') ) { my $value = $got->value('OS_Code'); return $self->saveErrorString(undef, "OS_Code must be between 0 and 255, got '$value'") if $value < 0 || $value > 255 ; } # gzip only supports Deflate at present $got->value('Method' => Z_DEFLATED) ; if ( ! $got->parsed('ExtraFlags')) { $got->value('ExtraFlags' => 2) if $got->value('Level') == Z_BEST_SPEED ; $got->value('ExtraFlags' => 4) if $got->value('Level') == Z_BEST_COMPRESSION ; } my $data = $got->value('ExtraField') ; if (defined $data) { my $bad = IO::Compress::Zlib::Extra::parseExtraField($data, $strict, 1) ; return $self->saveErrorString(undef, "Error with ExtraField Parameter: $bad", Z_DATA_ERROR) if $bad ; $got->value('ExtraField', $data) ; } } return 1; } sub mkTrailer { my $self = shift ; return pack("V V", *$self->{Compress}->crc32(), *$self->{UnCompSize}->get32bit()); } sub getInverseClass { return ('IO::Uncompress::Gunzip', \$IO::Uncompress::Gunzip::GunzipError); } sub getFileInfo { my $self = shift ; my $params = shift; my $filename = shift ; my $defaultTime = (stat($filename))[9] ; $params->value('Name' => $filename) if ! $params->parsed('Name') ; $params->value('Time' => $defaultTime) if ! $params->parsed('Time') ; } sub mkHeader { my $self = shift ; my $param = shift ; # stort-circuit if a minimal header is requested. return GZIP_MINIMUM_HEADER if $param->value('Minimal') ; # METHOD my $method = $param->valueOrDefault('Method', GZIP_CM_DEFLATED) ; # FLAGS my $flags = GZIP_FLG_DEFAULT ; $flags |= GZIP_FLG_FTEXT if $param->value('TextFlag') ; $flags |= GZIP_FLG_FHCRC if $param->value('HeaderCRC') ; $flags |= GZIP_FLG_FEXTRA if $param->wantValue('ExtraField') ; $flags |= GZIP_FLG_FNAME if $param->wantValue('Name') ; $flags |= GZIP_FLG_FCOMMENT if $param->wantValue('Comment') ; # MTIME my $time = $param->valueOrDefault('Time', GZIP_MTIME_DEFAULT) ; # EXTRA FLAGS my $extra_flags = $param->valueOrDefault('ExtraFlags', GZIP_XFL_DEFAULT); # OS CODE my $os_code = $param->valueOrDefault('OS_Code', GZIP_OS_DEFAULT) ; my $out = pack("C4 V C C", GZIP_ID1, # ID1 GZIP_ID2, # ID2 $method, # Compression Method $flags, # Flags $time, # Modification Time $extra_flags, # Extra Flags $os_code, # Operating System Code ) ; # EXTRA if ($flags & GZIP_FLG_FEXTRA) { my $extra = $param->value('ExtraField') ; $out .= pack("v", length $extra) . $extra ; } # NAME if ($flags & GZIP_FLG_FNAME) { my $name .= $param->value('Name') ; $name =~ s/\x00.*$//; $out .= $name ; # Terminate the filename with NULL unless it already is $out .= GZIP_NULL_BYTE if !length $name or substr($name, 1, -1) ne GZIP_NULL_BYTE ; } # COMMENT if ($flags & GZIP_FLG_FCOMMENT) { my $comment .= $param->value('Comment') ; $comment =~ s/\x00.*$//; $out .= $comment ; # Terminate the comment with NULL unless it already is $out .= GZIP_NULL_BYTE if ! length $comment or substr($comment, 1, -1) ne GZIP_NULL_BYTE; } # HEADER CRC $out .= pack("v", crc32($out) & 0x00FF ) if $param->value('HeaderCRC') ; noUTF8($out); return $out ; } sub mkFinalTrailer { return ''; } 1; __END__ #line 1243 FILE&91d37034/IO/Compress/Gzip/Constants.pm#line 1 "/usr/local/share/perl/5.10.1/IO/Compress/Gzip/Constants.pm" package IO::Compress::Gzip::Constants; use strict ; use warnings; use bytes; require Exporter; our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names); our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE); $VERSION = '2.030'; @ISA = qw(Exporter); @EXPORT= qw( GZIP_ID_SIZE GZIP_ID1 GZIP_ID2 GZIP_FLG_DEFAULT GZIP_FLG_FTEXT GZIP_FLG_FHCRC GZIP_FLG_FEXTRA GZIP_FLG_FNAME GZIP_FLG_FCOMMENT GZIP_FLG_RESERVED GZIP_CM_DEFLATED GZIP_MIN_HEADER_SIZE GZIP_TRAILER_SIZE GZIP_MTIME_DEFAULT GZIP_XFL_DEFAULT GZIP_FEXTRA_HEADER_SIZE GZIP_FEXTRA_MAX_SIZE GZIP_FEXTRA_SUBFIELD_HEADER_SIZE GZIP_FEXTRA_SUBFIELD_ID_SIZE GZIP_FEXTRA_SUBFIELD_LEN_SIZE GZIP_FEXTRA_SUBFIELD_MAX_SIZE $GZIP_FNAME_INVALID_CHAR_RE $GZIP_FCOMMENT_INVALID_CHAR_RE GZIP_FHCRC_SIZE GZIP_ISIZE_MAX GZIP_ISIZE_MOD_VALUE GZIP_NULL_BYTE GZIP_OS_DEFAULT %GZIP_OS_Names GZIP_MINIMUM_HEADER ); # Constant names derived from RFC 1952 use constant GZIP_ID_SIZE => 2 ; use constant GZIP_ID1 => 0x1F; use constant GZIP_ID2 => 0x8B; use constant GZIP_MIN_HEADER_SIZE => 10 ;# minimum gzip header size use constant GZIP_TRAILER_SIZE => 8 ; use constant GZIP_FLG_DEFAULT => 0x00 ; use constant GZIP_FLG_FTEXT => 0x01 ; use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip use constant GZIP_FLG_FEXTRA => 0x04 ; use constant GZIP_FLG_FNAME => 0x08 ; use constant GZIP_FLG_FCOMMENT => 0x10 ; #use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ; use constant GZIP_XFL_DEFAULT => 0x00 ; use constant GZIP_MTIME_DEFAULT => 0x00 ; use constant GZIP_FEXTRA_HEADER_SIZE => 2 ; use constant GZIP_FEXTRA_MAX_SIZE => 0xFFFF ; use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ; use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ; use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE + GZIP_FEXTRA_SUBFIELD_LEN_SIZE; use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE - GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ; if (ord('A') == 193) { # EBCDIC $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x3f\xff]'; $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x0a\x11-\x14\x16-\x3f\xff]'; } else { $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x1F\x7F-\x9F]'; $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x09\x11-\x1F\x7F-\x9F]'; } use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip use constant GZIP_CM_DEFLATED => 8 ; use constant GZIP_NULL_BYTE => "\x00"; use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ; use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ; # OS Names sourced from http://www.gzip.org/format.txt use constant GZIP_OS_DEFAULT=> 0xFF ; %GZIP_OS_Names = ( 0 => 'MS-DOS', 1 => 'Amiga', 2 => 'VMS', 3 => 'Unix', 4 => 'VM/CMS', 5 => 'Atari TOS', 6 => 'HPFS (OS/2, NT)', 7 => 'Macintosh', 8 => 'Z-System', 9 => 'CP/M', 10 => 'TOPS-20', 11 => 'NTFS (NT)', 12 => 'SMS QDOS', 13 => 'Acorn RISCOS', 14 => 'VFAT file system (Win95, NT)', 15 => 'MVS', 16 => 'BeOS', 17 => 'Tandem/NSK', 18 => 'THEOS', GZIP_OS_DEFAULT() => 'Unknown', ) ; use constant GZIP_MINIMUM_HEADER => pack("C4 V C C", GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT, GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ; 1; FILE"309eb42d/IO/Compress/RawDeflate.pmz#line 1 "/usr/local/share/perl/5.10.1/IO/Compress/RawDeflate.pm" package IO::Compress::RawDeflate ; # create RFC1951 # use strict ; use warnings; use bytes; use IO::Compress::Base 2.030 ; use IO::Compress::Base::Common 2.030 qw(:Status createSelfTiedObject); use IO::Compress::Adapter::Deflate 2.030 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError); $VERSION = '2.030'; $RawDeflateError = ''; @ISA = qw(Exporter IO::Compress::Base); @EXPORT_OK = qw( $RawDeflateError rawdeflate ) ; %EXPORT_TAGS = ( flush => [qw{ Z_NO_FLUSH Z_PARTIAL_FLUSH Z_SYNC_FLUSH Z_FULL_FLUSH Z_FINISH Z_BLOCK }], level => [qw{ Z_NO_COMPRESSION Z_BEST_SPEED Z_BEST_COMPRESSION Z_DEFAULT_COMPRESSION }], strategy => [qw{ Z_FILTERED Z_HUFFMAN_ONLY Z_RLE Z_FIXED Z_DEFAULT_STRATEGY }], ); { my %seen; foreach (keys %EXPORT_TAGS ) { push @{$EXPORT_TAGS{constants}}, grep { !$seen{$_}++ } @{ $EXPORT_TAGS{$_} } } $EXPORT_TAGS{all} = $EXPORT_TAGS{constants} ; } %DEFLATE_CONSTANTS = %EXPORT_TAGS; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); sub new { my $class = shift ; my $obj = createSelfTiedObject($class, \$RawDeflateError); return $obj->_create(undef, @_); } sub rawdeflate { my $obj = createSelfTiedObject(undef, \$RawDeflateError); return $obj->_def(@_); } sub ckParams { my $self = shift ; my $got = shift; return 1 ; } sub mkComp { my $self = shift ; my $got = shift ; my ($obj, $errstr, $errno) = IO::Compress::Adapter::Deflate::mkCompObject( $got->value('CRC32'), $got->value('Adler32'), $got->value('Level'), $got->value('Strategy') ); return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; return $obj; } sub mkHeader { my $self = shift ; return ''; } sub mkTrailer { my $self = shift ; return ''; } sub mkFinalTrailer { return ''; } #sub newHeader #{ # my $self = shift ; # return ''; #} sub getExtraParams { my $self = shift ; return $self->getZlibParams(); } sub getZlibParams { my $self = shift ; use IO::Compress::Base::Common 2.030 qw(:Parse); use Compress::Raw::Zlib 2.030 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY); return ( # zlib behaviour #'Method' => [0, 1, Parse_unsigned, Z_DEFLATED], 'Level' => [0, 1, Parse_signed, Z_DEFAULT_COMPRESSION], 'Strategy' => [0, 1, Parse_signed, Z_DEFAULT_STRATEGY], 'CRC32' => [0, 1, Parse_boolean, 0], 'ADLER32' => [0, 1, Parse_boolean, 0], 'Merge' => [1, 1, Parse_boolean, 0], ); } sub getInverseClass { return ('IO::Uncompress::RawInflate', \$IO::Uncompress::RawInflate::RawInflateError); } sub getFileInfo { my $self = shift ; my $params = shift; my $file = shift ; } use IO::Seekable qw(SEEK_SET); sub createMerge { my $self = shift ; my $outValue = shift ; my $outType = shift ; my ($invClass, $error_ref) = $self->getInverseClass(); eval "require $invClass" or die "aaaahhhh" ; my $inf = $invClass->new( $outValue, Transparent => 0, #Strict => 1, AutoClose => 0, Scan => 1) or return $self->saveErrorString(undef, "Cannot create InflateScan object: $$error_ref" ) ; my $end_offset = 0; $inf->scan() or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $inf->errorNo) ; $inf->zap($end_offset) or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $inf->errorNo) ; my $def = *$self->{Compress} = $inf->createDeflate(); *$self->{Header} = *$inf->{Info}{Header}; *$self->{UnCompSize} = *$inf->{UnCompSize}->clone(); *$self->{CompSize} = *$inf->{CompSize}->clone(); # TODO -- fix this #*$self->{CompSize} = new U64(0, *$self->{UnCompSize_32bit}); if ( $outType eq 'buffer') { substr( ${ *$self->{Buffer} }, $end_offset) = '' } elsif ($outType eq 'handle' || $outType eq 'filename') { *$self->{FH} = *$inf->{FH} ; delete *$inf->{FH}; *$self->{FH}->flush() ; *$self->{Handle} = 1 if $outType eq 'handle'; #seek(*$self->{FH}, $end_offset, SEEK_SET) *$self->{FH}->seek($end_offset, SEEK_SET) or return $self->saveErrorString(undef, $!, $!) ; } return $def ; } #### zlib specific methods sub deflateParams { my $self = shift ; my $level = shift ; my $strategy = shift ; my $status = *$self->{Compress}->deflateParams(Level => $level, Strategy => $strategy) ; return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo}) if $status == STATUS_ERROR; return 1; } 1; __END__ #line 1018 FILE"e5cd3895/IO/Compress/Zlib/Extra.pm#line 1 "/usr/local/share/perl/5.10.1/IO/Compress/Zlib/Extra.pm" package IO::Compress::Zlib::Extra; require 5.004 ; use strict ; use warnings; use bytes; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS); $VERSION = '2.030'; use IO::Compress::Gzip::Constants 2.030 ; sub ExtraFieldError { return $_[0]; return "Error with ExtraField Parameter: $_[0]" ; } sub validateExtraFieldPair { my $pair = shift ; my $strict = shift; my $gzipMode = shift ; return ExtraFieldError("Not an array ref") unless ref $pair && ref $pair eq 'ARRAY'; return ExtraFieldError("SubField must have two parts") unless @$pair == 2 ; return ExtraFieldError("SubField ID is a reference") if ref $pair->[0] ; return ExtraFieldError("SubField Data is a reference") if ref $pair->[1] ; # ID is exactly two chars return ExtraFieldError("SubField ID not two chars long") unless length $pair->[0] == GZIP_FEXTRA_SUBFIELD_ID_SIZE ; # Check that the 2nd byte of the ID isn't 0 return ExtraFieldError("SubField ID 2nd byte is 0x00") if $strict && $gzipMode && substr($pair->[0], 1, 1) eq "\x00" ; return ExtraFieldError("SubField Data too long") if length $pair->[1] > GZIP_FEXTRA_SUBFIELD_MAX_SIZE ; return undef ; } sub parseRawExtra { my $data = shift ; my $extraRef = shift; my $strict = shift; my $gzipMode = shift ; #my $lax = shift ; #return undef # if $lax ; my $XLEN = length $data ; return ExtraFieldError("Too Large") if $XLEN > GZIP_FEXTRA_MAX_SIZE; my $offset = 0 ; while ($offset < $XLEN) { return ExtraFieldError("Truncated in FEXTRA Body Section") if $offset + GZIP_FEXTRA_SUBFIELD_HEADER_SIZE > $XLEN ; my $id = substr($data, $offset, GZIP_FEXTRA_SUBFIELD_ID_SIZE); $offset += GZIP_FEXTRA_SUBFIELD_ID_SIZE; my $subLen = unpack("v", substr($data, $offset, GZIP_FEXTRA_SUBFIELD_LEN_SIZE)); $offset += GZIP_FEXTRA_SUBFIELD_LEN_SIZE ; return ExtraFieldError("Truncated in FEXTRA Body Section") if $offset + $subLen > $XLEN ; my $bad = validateExtraFieldPair( [$id, substr($data, $offset, $subLen)], $strict, $gzipMode ); return $bad if $bad ; push @$extraRef, [$id => substr($data, $offset, $subLen)] if defined $extraRef;; $offset += $subLen ; } return undef ; } sub mkSubField { my $id = shift ; my $data = shift ; return $id . pack("v", length $data) . $data ; } sub parseExtraField { my $dataRef = $_[0]; my $strict = $_[1]; my $gzipMode = $_[2]; #my $lax = @_ == 2 ? $_[1] : 1; # ExtraField can be any of # # -ExtraField => $data # # -ExtraField => [$id1, $data1, # $id2, $data2] # ... # ] # # -ExtraField => [ [$id1 => $data1], # [$id2 => $data2], # ... # ] # # -ExtraField => { $id1 => $data1, # $id2 => $data2, # ... # } if ( ! ref $dataRef ) { return undef if ! $strict; return parseRawExtra($dataRef, undef, 1, $gzipMode); } #my $data = $$dataRef; my $data = $dataRef; my $out = '' ; if (ref $data eq 'ARRAY') { if (ref $data->[0]) { foreach my $pair (@$data) { return ExtraFieldError("Not list of lists") unless ref $pair eq 'ARRAY' ; my $bad = validateExtraFieldPair($pair, $strict, $gzipMode) ; return $bad if $bad ; $out .= mkSubField(@$pair); } } else { return ExtraFieldError("Not even number of elements") unless @$data % 2 == 0; for (my $ix = 0; $ix <= length(@$data) -1 ; $ix += 2) { my $bad = validateExtraFieldPair([$data->[$ix], $data->[$ix+1]], $strict, $gzipMode) ; return $bad if $bad ; $out .= mkSubField($data->[$ix], $data->[$ix+1]); } } } elsif (ref $data eq 'HASH') { while (my ($id, $info) = each %$data) { my $bad = validateExtraFieldPair([$id, $info], $strict, $gzipMode); return $bad if $bad ; $out .= mkSubField($id, $info); } } else { return ExtraFieldError("Not a scalar, array ref or hash ref") ; } return ExtraFieldError("Too Large") if length $out > GZIP_FEXTRA_MAX_SIZE; $_[0] = $out ; return undef; } 1; __END__ FILE)0623ceda/IO/Uncompress/Adapter/Inflate.pm #line 1 "/usr/local/share/perl/5.10.1/IO/Uncompress/Adapter/Inflate.pm" package IO::Uncompress::Adapter::Inflate; use strict; use warnings; use bytes; use IO::Compress::Base::Common 2.030 qw(:Status); use Compress::Raw::Zlib 2.030 qw(Z_OK Z_BUF_ERROR Z_STREAM_END Z_FINISH MAX_WBITS); our ($VERSION); $VERSION = '2.030'; sub mkUncompObject { my $crc32 = shift || 1; my $adler32 = shift || 1; my $scan = shift || 0; my $inflate ; my $status ; if ($scan) { ($inflate, $status) = new Compress::Raw::Zlib::InflateScan #LimitOutput => 1, CRC32 => $crc32, ADLER32 => $adler32, WindowBits => - MAX_WBITS ; } else { ($inflate, $status) = new Compress::Raw::Zlib::Inflate AppendOutput => 1, LimitOutput => 1, CRC32 => $crc32, ADLER32 => $adler32, WindowBits => - MAX_WBITS ; } return (undef, "Could not create Inflation object: $status", $status) if $status != Z_OK ; return bless {'Inf' => $inflate, 'CompSize' => 0, 'UnCompSize' => 0, 'Error' => '', 'ConsumesInput' => 1, } ; } sub uncompr { my $self = shift ; my $from = shift ; my $to = shift ; my $eof = shift ; my $inf = $self->{Inf}; my $status = $inf->inflate($from, $to, $eof); $self->{ErrorNo} = $status; if ($status != Z_OK && $status != Z_STREAM_END && $status != Z_BUF_ERROR) { $self->{Error} = "Inflation Error: $status"; return STATUS_ERROR; } return STATUS_OK if $status == Z_BUF_ERROR ; # ??? return STATUS_OK if $status == Z_OK ; return STATUS_ENDSTREAM if $status == Z_STREAM_END ; return STATUS_ERROR ; } sub reset { my $self = shift ; $self->{Inf}->inflateReset(); return STATUS_OK ; } #sub count #{ # my $self = shift ; # $self->{Inf}->inflateCount(); #} sub crc32 { my $self = shift ; $self->{Inf}->crc32(); } sub compressedBytes { my $self = shift ; $self->{Inf}->compressedBytes(); } sub uncompressedBytes { my $self = shift ; $self->{Inf}->uncompressedBytes(); } sub adler32 { my $self = shift ; $self->{Inf}->adler32(); } sub sync { my $self = shift ; ( $self->{Inf}->inflateSync(@_) == Z_OK) ? STATUS_OK : STATUS_ERROR ; } sub getLastBlockOffset { my $self = shift ; $self->{Inf}->getLastBlockOffset(); } sub getEndOffset { my $self = shift ; $self->{Inf}->getEndOffset(); } sub resetLastBlockByte { my $self = shift ; $self->{Inf}->resetLastBlockByte(@_); } sub createDeflateStream { my $self = shift ; my $deflate = $self->{Inf}->createDeflateStream(@_); return bless {'Def' => $deflate, 'CompSize' => 0, 'UnCompSize' => 0, 'Error' => '', }, 'IO::Compress::Adapter::Deflate'; } 1; __END__ FILEe519c841/IO/Uncompress/Base.pm#line 1 "/usr/local/share/perl/5.10.1/IO/Uncompress/Base.pm" package IO::Uncompress::Base ; use strict ; use warnings; use bytes; our (@ISA, $VERSION, @EXPORT_OK, %EXPORT_TAGS); @ISA = qw(Exporter IO::File); $VERSION = '2.030'; use constant G_EOF => 0 ; use constant G_ERR => -1 ; use IO::Compress::Base::Common 2.030 ; #use Parse::Parameters ; use IO::File ; use Symbol; use Scalar::Util qw(readonly); use List::Util qw(min); use Carp ; %EXPORT_TAGS = ( ); push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; #Exporter::export_ok_tags('all') ; sub smartRead { my $self = $_[0]; my $out = $_[1]; my $size = $_[2]; $$out = "" ; my $offset = 0 ; if (defined *$self->{InputLength}) { return 0 if *$self->{InputLengthRemaining} <= 0 ; $size = min($size, *$self->{InputLengthRemaining}); } if ( length *$self->{Prime} ) { #$$out = substr(*$self->{Prime}, 0, $size, '') ; $$out = substr(*$self->{Prime}, 0, $size) ; substr(*$self->{Prime}, 0, $size) = '' ; if (length $$out == $size) { *$self->{InputLengthRemaining} -= length $$out if defined *$self->{InputLength}; return length $$out ; } $offset = length $$out ; } my $get_size = $size - $offset ; if (defined *$self->{FH}) { if ($offset) { # Not using this # # *$self->{FH}->read($$out, $get_size, $offset); # # because the filehandle may not support the offset parameter # An example is Net::FTP my $tmp = ''; *$self->{FH}->read($tmp, $get_size) && (substr($$out, $offset) = $tmp); } else { *$self->{FH}->read($$out, $get_size) } } elsif (defined *$self->{InputEvent}) { my $got = 1 ; while (length $$out < $size) { last if ($got = *$self->{InputEvent}->($$out, $get_size)) <= 0; } if (length $$out > $size ) { #*$self->{Prime} = substr($$out, $size, length($$out), ''); *$self->{Prime} = substr($$out, $size, length($$out)); substr($$out, $size, length($$out)) = ''; } *$self->{EventEof} = 1 if $got <= 0 ; } else { no warnings 'uninitialized'; my $buf = *$self->{Buffer} ; $$buf = '' unless defined $$buf ; #$$out = '' unless defined $$out ; substr($$out, $offset) = substr($$buf, *$self->{BufferOffset}, $get_size); if (*$self->{ConsumeInput}) { substr($$buf, 0, $get_size) = '' } else { *$self->{BufferOffset} += length($$out) - $offset } } *$self->{InputLengthRemaining} -= length($$out) #- $offset if defined *$self->{InputLength}; $self->saveStatus(length $$out < 0 ? STATUS_ERROR : STATUS_OK) ; return length $$out; } sub pushBack { my $self = shift ; return if ! defined $_[0] || length $_[0] == 0 ; if (defined *$self->{FH} || defined *$self->{InputEvent} ) { *$self->{Prime} = $_[0] . *$self->{Prime} ; *$self->{InputLengthRemaining} += length($_[0]); } else { my $len = length $_[0]; if($len > *$self->{BufferOffset}) { *$self->{Prime} = substr($_[0], 0, $len - *$self->{BufferOffset}) . *$self->{Prime} ; *$self->{InputLengthRemaining} = *$self->{InputLength}; *$self->{BufferOffset} = 0 } else { *$self->{InputLengthRemaining} += length($_[0]); *$self->{BufferOffset} -= length($_[0]) ; } } } sub smartSeek { my $self = shift ; my $offset = shift ; my $truncate = shift; #print "smartSeek to $offset\n"; # TODO -- need to take prime into account if (defined *$self->{FH}) { *$self->{FH}->seek($offset, SEEK_SET) } else { *$self->{BufferOffset} = $offset ; substr(${ *$self->{Buffer} }, *$self->{BufferOffset}) = '' if $truncate; return 1; } } sub smartWrite { my $self = shift ; my $out_data = shift ; if (defined *$self->{FH}) { # flush needed for 5.8.0 defined *$self->{FH}->write($out_data, length $out_data) && defined *$self->{FH}->flush() ; } else { my $buf = *$self->{Buffer} ; substr($$buf, *$self->{BufferOffset}, length $out_data) = $out_data ; *$self->{BufferOffset} += length($out_data) ; return 1; } } sub smartReadExact { return $_[0]->smartRead($_[1], $_[2]) == $_[2]; } sub smartEof { my ($self) = $_[0]; local $.; return 0 if length *$self->{Prime} || *$self->{PushMode}; if (defined *$self->{FH}) { # Could use # # *$self->{FH}->eof() # # here, but this can cause trouble if # the filehandle is itself a tied handle, but it uses sysread. # Then we get into mixing buffered & non-buffered IO, which will cause trouble my $info = $self->getErrInfo(); my $buffer = ''; my $status = $self->smartRead(\$buffer, 1); $self->pushBack($buffer) if length $buffer; $self->setErrInfo($info); return $status == 0 ; } elsif (defined *$self->{InputEvent}) { *$self->{EventEof} } else { *$self->{BufferOffset} >= length(${ *$self->{Buffer} }) } } sub clearError { my $self = shift ; *$self->{ErrorNo} = 0 ; ${ *$self->{Error} } = '' ; } sub getErrInfo { my $self = shift ; return [ *$self->{ErrorNo}, ${ *$self->{Error} } ] ; } sub setErrInfo { my $self = shift ; my $ref = shift; *$self->{ErrorNo} = $ref->[0] ; ${ *$self->{Error} } = $ref->[1] ; } sub saveStatus { my $self = shift ; my $errno = shift() + 0 ; #return $errno unless $errno || ! defined *$self->{ErrorNo}; #return $errno unless $errno ; *$self->{ErrorNo} = $errno; ${ *$self->{Error} } = '' ; return *$self->{ErrorNo} ; } sub saveErrorString { my $self = shift ; my $retval = shift ; #return $retval if ${ *$self->{Error} }; ${ *$self->{Error} } = shift ; *$self->{ErrorNo} = shift() + 0 if @_ ; #warn "saveErrorString: " . ${ *$self->{Error} } . " " . *$self->{Error} . "\n" ; return $retval; } sub croakError { my $self = shift ; $self->saveErrorString(0, $_[0]); croak $_[0]; } sub closeError { my $self = shift ; my $retval = shift ; my $errno = *$self->{ErrorNo}; my $error = ${ *$self->{Error} }; $self->close(); *$self->{ErrorNo} = $errno ; ${ *$self->{Error} } = $error ; return $retval; } sub error { my $self = shift ; return ${ *$self->{Error} } ; } sub errorNo { my $self = shift ; return *$self->{ErrorNo}; } sub HeaderError { my ($self) = shift; return $self->saveErrorString(undef, "Header Error: $_[0]", STATUS_ERROR); } sub TrailerError { my ($self) = shift; return $self->saveErrorString(G_ERR, "Trailer Error: $_[0]", STATUS_ERROR); } sub TruncatedHeader { my ($self) = shift; return $self->HeaderError("Truncated in $_[0] Section"); } sub TruncatedTrailer { my ($self) = shift; return $self->TrailerError("Truncated in $_[0] Section"); } sub postCheckParams { return 1; } sub checkParams { my $self = shift ; my $class = shift ; my $got = shift || IO::Compress::Base::Parameters::new(); my $Valid = { 'BlockSize' => [1, 1, Parse_unsigned, 16 * 1024], 'AutoClose' => [1, 1, Parse_boolean, 0], 'Strict' => [1, 1, Parse_boolean, 0], 'Append' => [1, 1, Parse_boolean, 0], 'Prime' => [1, 1, Parse_any, undef], 'MultiStream' => [1, 1, Parse_boolean, 0], 'Transparent' => [1, 1, Parse_any, 1], 'Scan' => [1, 1, Parse_boolean, 0], 'InputLength' => [1, 1, Parse_unsigned, undef], 'BinModeOut' => [1, 1, Parse_boolean, 0], #'Encode' => [1, 1, Parse_any, undef], #'ConsumeInput' => [1, 1, Parse_boolean, 0], $self->getExtraParams(), #'Todo - Revert to ordinary file on end Z_STREAM_END'=> 0, # ContinueAfterEof } ; $Valid->{TrailingData} = [1, 1, Parse_writable_scalar, undef] if *$self->{OneShot} ; $got->parse($Valid, @_ ) or $self->croakError("${class}: $got->{Error}") ; $self->postCheckParams($got) or $self->croakError("${class}: " . $self->error()) ; return $got; } sub _create { my $obj = shift; my $got = shift; my $append_mode = shift ; my $class = ref $obj; $obj->croakError("$class: Missing Input parameter") if ! @_ && ! $got ; my $inValue = shift ; *$obj->{OneShot} = 0 ; if (! $got) { $got = $obj->checkParams($class, undef, @_) or return undef ; } my $inType = whatIsInput($inValue, 1); $obj->ckInputParam($class, $inValue, 1) or return undef ; *$obj->{InNew} = 1; $obj->ckParams($got) or $obj->croakError("${class}: " . *$obj->{Error}); if ($inType eq 'buffer' || $inType eq 'code') { *$obj->{Buffer} = $inValue ; *$obj->{InputEvent} = $inValue if $inType eq 'code' ; } else { if ($inType eq 'handle') { *$obj->{FH} = $inValue ; *$obj->{Handle} = 1 ; # Need to rewind for Scan *$obj->{FH}->seek(0, SEEK_SET) if $got->value('Scan'); } else { no warnings ; my $mode = '<'; $mode = '+<' if $got->value('Scan'); *$obj->{StdIO} = ($inValue eq '-'); *$obj->{FH} = new IO::File "$mode $inValue" or return $obj->saveErrorString(undef, "cannot open file '$inValue': $!", $!) ; } *$obj->{LineNo} = $. = 0; setBinModeInput(*$obj->{FH}) ; my $buff = "" ; *$obj->{Buffer} = \$buff ; } if ($got->parsed('Encode')) { my $want_encoding = $got->value('Encode'); *$obj->{Encoding} = getEncoding($obj, $class, $want_encoding); } *$obj->{InputLength} = $got->parsed('InputLength') ? $got->value('InputLength') : undef ; *$obj->{InputLengthRemaining} = $got->value('InputLength'); *$obj->{BufferOffset} = 0 ; *$obj->{AutoClose} = $got->value('AutoClose'); *$obj->{Strict} = $got->value('Strict'); *$obj->{BlockSize} = $got->value('BlockSize'); *$obj->{Append} = $got->value('Append'); *$obj->{AppendOutput} = $append_mode || $got->value('Append'); *$obj->{ConsumeInput} = $got->value('ConsumeInput'); *$obj->{Transparent} = $got->value('Transparent'); *$obj->{MultiStream} = $got->value('MultiStream'); # TODO - move these two into RawDeflate *$obj->{Scan} = $got->value('Scan'); *$obj->{ParseExtra} = $got->value('ParseExtra') || $got->value('Strict') ; *$obj->{Type} = ''; *$obj->{Prime} = $got->value('Prime') || '' ; *$obj->{Pending} = ''; *$obj->{Plain} = 0; *$obj->{PlainBytesRead} = 0; *$obj->{InflatedBytesRead} = 0; *$obj->{UnCompSize} = new U64; *$obj->{CompSize} = new U64; *$obj->{TotalInflatedBytesRead} = 0; *$obj->{NewStream} = 0 ; *$obj->{EventEof} = 0 ; *$obj->{ClassName} = $class ; *$obj->{Params} = $got ; if (*$obj->{ConsumeInput}) { *$obj->{InNew} = 0; *$obj->{Closed} = 0; return $obj } my $status = $obj->mkUncomp($got); return undef unless defined $status; if ( ! $status) { return undef unless *$obj->{Transparent}; $obj->clearError(); *$obj->{Type} = 'plain'; *$obj->{Plain} = 1; #$status = $obj->mkIdentityUncomp($class, $got); $obj->pushBack(*$obj->{HeaderPending}) ; } push @{ *$obj->{InfoList} }, *$obj->{Info} ; $obj->saveStatus(STATUS_OK) ; *$obj->{InNew} = 0; *$obj->{Closed} = 0; return $obj; } sub ckInputParam { my $self = shift ; my $from = shift ; my $inType = whatIsInput($_[0], $_[1]); $self->croakError("$from: input parameter not a filename, filehandle, array ref or scalar ref") if ! $inType ; # if ($inType eq 'filename' ) # { # return $self->saveErrorString(1, "$from: input filename is undef or null string", STATUS_ERROR) # if ! defined $_[0] || $_[0] eq '' ; # # if ($_[0] ne '-' && ! -e $_[0] ) # { # return $self->saveErrorString(1, # "input file '$_[0]' does not exist", STATUS_ERROR); # } # } return 1; } sub _inf { my $obj = shift ; my $class = (caller)[0] ; my $name = (caller(1))[3] ; $obj->croakError("$name: expected at least 1 parameters\n") unless @_ >= 1 ; my $input = shift ; my $haveOut = @_ ; my $output = shift ; my $x = new IO::Compress::Base::Validator($class, *$obj->{Error}, $name, $input, $output) or return undef ; push @_, $output if $haveOut && $x->{Hash}; *$obj->{OneShot} = 1 ; my $got = $obj->checkParams($name, undef, @_) or return undef ; if ($got->parsed('TrailingData')) { *$obj->{TrailingData} = $got->value('TrailingData'); } *$obj->{MultiStream} = $got->value('MultiStream'); $got->value('MultiStream', 0); $x->{Got} = $got ; # if ($x->{Hash}) # { # while (my($k, $v) = each %$input) # { # $v = \$input->{$k} # unless defined $v ; # # $obj->_singleTarget($x, $k, $v, @_) # or return undef ; # } # # return keys %$input ; # } if ($x->{GlobMap}) { $x->{oneInput} = 1 ; foreach my $pair (@{ $x->{Pairs} }) { my ($from, $to) = @$pair ; $obj->_singleTarget($x, $from, $to, @_) or return undef ; } return scalar @{ $x->{Pairs} } ; } if (! $x->{oneOutput} ) { my $inFile = ($x->{inType} eq 'filenames' || $x->{inType} eq 'filename'); $x->{inType} = $inFile ? 'filename' : 'buffer'; foreach my $in ($x->{oneInput} ? $input : @$input) { my $out ; $x->{oneInput} = 1 ; $obj->_singleTarget($x, $in, $output, @_) or return undef ; } return 1 ; } # finally the 1 to 1 and n to 1 return $obj->_singleTarget($x, $input, $output, @_); croak "should not be here" ; } sub retErr { my $x = shift ; my $string = shift ; ${ $x->{Error} } = $string ; return undef ; } sub _singleTarget { my $self = shift ; my $x = shift ; my $input = shift; my $output = shift; my $buff = ''; $x->{buff} = \$buff ; my $fh ; if ($x->{outType} eq 'filename') { my $mode = '>' ; $mode = '>>' if $x->{Got}->value('Append') ; $x->{fh} = new IO::File "$mode $output" or return retErr($x, "cannot open file '$output': $!") ; binmode $x->{fh} if $x->{Got}->valueOrDefault('BinModeOut'); } elsif ($x->{outType} eq 'handle') { $x->{fh} = $output; binmode $x->{fh} if $x->{Got}->valueOrDefault('BinModeOut'); if ($x->{Got}->value('Append')) { seek($x->{fh}, 0, SEEK_END) or return retErr($x, "Cannot seek to end of output filehandle: $!") ; } } elsif ($x->{outType} eq 'buffer' ) { $$output = '' unless $x->{Got}->value('Append'); $x->{buff} = $output ; } if ($x->{oneInput}) { defined $self->_rd2($x, $input, $output) or return undef; } else { for my $element ( ($x->{inType} eq 'hash') ? keys %$input : @$input) { defined $self->_rd2($x, $element, $output) or return undef ; } } if ( ($x->{outType} eq 'filename' && $output ne '-') || ($x->{outType} eq 'handle' && $x->{Got}->value('AutoClose'))) { $x->{fh}->close() or return retErr($x, $!); delete $x->{fh}; } return 1 ; } sub _rd2 { my $self = shift ; my $x = shift ; my $input = shift; my $output = shift; my $z = createSelfTiedObject($x->{Class}, *$self->{Error}); $z->_create($x->{Got}, 1, $input, @_) or return undef ; my $status ; my $fh = $x->{fh}; while (1) { while (($status = $z->read($x->{buff})) > 0) { if ($fh) { print $fh ${ $x->{buff} } or return $z->saveErrorString(undef, "Error writing to output file: $!", $!); ${ $x->{buff} } = '' ; } } if (! $x->{oneOutput} ) { my $ot = $x->{outType} ; if ($ot eq 'array') { push @$output, $x->{buff} } elsif ($ot eq 'hash') { $output->{$input} = $x->{buff} } my $buff = ''; $x->{buff} = \$buff; } last if $status < 0 || $z->smartEof(); #last if $status < 0 ; last unless *$self->{MultiStream}; $status = $z->nextStream(); last unless $status == 1 ; } return $z->closeError(undef) if $status < 0 ; ${ *$self->{TrailingData} } = $z->trailingData() if defined *$self->{TrailingData} ; $z->close() or return undef ; return 1 ; } sub TIEHANDLE { return $_[0] if ref($_[0]); die "OOPS\n" ; } sub UNTIE { my $self = shift ; } sub getHeaderInfo { my $self = shift ; wantarray ? @{ *$self->{InfoList} } : *$self->{Info}; } sub readBlock { my $self = shift ; my $buff = shift ; my $size = shift ; if (defined *$self->{CompressedInputLength}) { if (*$self->{CompressedInputLengthRemaining} == 0) { delete *$self->{CompressedInputLength}; *$self->{CompressedInputLengthDone} = 1; return STATUS_OK ; } $size = min($size, *$self->{CompressedInputLengthRemaining} ); *$self->{CompressedInputLengthRemaining} -= $size ; } my $status = $self->smartRead($buff, $size) ; return $self->saveErrorString(STATUS_ERROR, "Error Reading Data") if $status < 0 ; if ($status == 0 ) { *$self->{Closed} = 1 ; *$self->{EndStream} = 1 ; return $self->saveErrorString(STATUS_ERROR, "unexpected end of file", STATUS_ERROR); } return STATUS_OK; } sub postBlockChk { return STATUS_OK; } sub _raw_read { # return codes # >0 - ok, number of bytes read # =0 - ok, eof # <0 - not ok my $self = shift ; return G_EOF if *$self->{Closed} ; #return G_EOF if !length *$self->{Pending} && *$self->{EndStream} ; return G_EOF if *$self->{EndStream} ; my $buffer = shift ; my $scan_mode = shift ; if (*$self->{Plain}) { my $tmp_buff ; my $len = $self->smartRead(\$tmp_buff, *$self->{BlockSize}) ; return $self->saveErrorString(G_ERR, "Error reading data: $!", $!) if $len < 0 ; if ($len == 0 ) { *$self->{EndStream} = 1 ; } else { *$self->{PlainBytesRead} += $len ; $$buffer .= $tmp_buff; } return $len ; } if (*$self->{NewStream}) { $self->gotoNextStream() > 0 or return G_ERR; # For the headers that actually uncompressed data, put the # uncompressed data into the output buffer. $$buffer .= *$self->{Pending} ; my $len = length *$self->{Pending} ; *$self->{Pending} = ''; return $len; } my $temp_buf = ''; my $outSize = 0; my $status = $self->readBlock(\$temp_buf, *$self->{BlockSize}, $outSize) ; return G_ERR if $status == STATUS_ERROR ; my $buf_len = 0; if ($status == STATUS_OK) { my $beforeC_len = length $temp_buf; my $before_len = defined $$buffer ? length $$buffer : 0 ; $status = *$self->{Uncomp}->uncompr(\$temp_buf, $buffer, defined *$self->{CompressedInputLengthDone} || $self->smartEof(), $outSize); # Remember the input buffer if it wasn't consumed completely $self->pushBack($temp_buf) if *$self->{Uncomp}{ConsumesInput}; return $self->saveErrorString(G_ERR, *$self->{Uncomp}{Error}, *$self->{Uncomp}{ErrorNo}) if $self->saveStatus($status) == STATUS_ERROR; $self->postBlockChk($buffer, $before_len) == STATUS_OK or return G_ERR; $buf_len = defined $$buffer ? length($$buffer) - $before_len : 0; *$self->{CompSize}->add($beforeC_len - length $temp_buf) ; *$self->{InflatedBytesRead} += $buf_len ; *$self->{TotalInflatedBytesRead} += $buf_len ; *$self->{UnCompSize}->add($buf_len) ; $self->filterUncompressed($buffer); if (*$self->{Encoding}) { $$buffer = *$self->{Encoding}->decode($$buffer); } } if ($status == STATUS_ENDSTREAM) { *$self->{EndStream} = 1 ; #$self->pushBack($temp_buf) ; #$temp_buf = ''; my $trailer; my $trailer_size = *$self->{Info}{TrailerLength} ; my $got = 0; if (*$self->{Info}{TrailerLength}) { $got = $self->smartRead(\$trailer, $trailer_size) ; } if ($got == $trailer_size) { $self->chkTrailer($trailer) == STATUS_OK or return G_ERR; } else { return $self->TrailerError("trailer truncated. Expected " . "$trailer_size bytes, got $got") if *$self->{Strict}; $self->pushBack($trailer) ; } # TODO - if want to file file pointer, do it here if (! $self->smartEof()) { *$self->{NewStream} = 1 ; if (*$self->{MultiStream}) { *$self->{EndStream} = 0 ; return $buf_len ; } } } # return the number of uncompressed bytes read return $buf_len ; } sub reset { my $self = shift ; return *$self->{Uncomp}->reset(); } sub filterUncompressed { } #sub isEndStream #{ # my $self = shift ; # return *$self->{NewStream} || # *$self->{EndStream} ; #} sub nextStream { my $self = shift ; my $status = $self->gotoNextStream(); $status == 1 or return $status ; *$self->{TotalInflatedBytesRead} = 0 ; *$self->{LineNo} = $. = 0; return 1; } sub gotoNextStream { my $self = shift ; if (! *$self->{NewStream}) { my $status = 1; my $buffer ; # TODO - make this more efficient if know the offset for the end of # the stream and seekable $status = $self->read($buffer) while $status > 0 ; return $status if $status < 0; } *$self->{NewStream} = 0 ; *$self->{EndStream} = 0 ; $self->reset(); *$self->{UnCompSize}->reset(); *$self->{CompSize}->reset(); my $magic = $self->ckMagic(); #*$self->{EndStream} = 0 ; if ( ! defined $magic) { if (! *$self->{Transparent} || $self->eof()) { *$self->{EndStream} = 1 ; return 0; } $self->clearError(); *$self->{Type} = 'plain'; *$self->{Plain} = 1; $self->pushBack(*$self->{HeaderPending}) ; } else { *$self->{Info} = $self->readHeader($magic); if ( ! defined *$self->{Info} ) { *$self->{EndStream} = 1 ; return -1; } } push @{ *$self->{InfoList} }, *$self->{Info} ; return 1; } sub streamCount { my $self = shift ; return 1 if ! defined *$self->{InfoList}; return scalar @{ *$self->{InfoList} } ; } sub read { # return codes # >0 - ok, number of bytes read # =0 - ok, eof # <0 - not ok my $self = shift ; return G_EOF if *$self->{Closed} ; my $buffer ; if (ref $_[0] ) { $self->croakError(*$self->{ClassName} . "::read: buffer parameter is read-only") if readonly(${ $_[0] }); $self->croakError(*$self->{ClassName} . "::read: not a scalar reference $_[0]" ) unless ref $_[0] eq 'SCALAR' ; $buffer = $_[0] ; } else { $self->croakError(*$self->{ClassName} . "::read: buffer parameter is read-only") if readonly($_[0]); $buffer = \$_[0] ; } my $length = $_[1] ; my $offset = $_[2] || 0; if (! *$self->{AppendOutput}) { if (! $offset) { $$buffer = '' ; } else { if ($offset > length($$buffer)) { $$buffer .= "\x00" x ($offset - length($$buffer)); } else { substr($$buffer, $offset) = ''; } } } return G_EOF if !length *$self->{Pending} && *$self->{EndStream} ; # the core read will return 0 if asked for 0 bytes return 0 if defined $length && $length == 0 ; $length = $length || 0; $self->croakError(*$self->{ClassName} . "::read: length parameter is negative") if $length < 0 ; # Short-circuit if this is a simple read, with no length # or offset specified. unless ( $length || $offset) { if (length *$self->{Pending}) { $$buffer .= *$self->{Pending} ; my $len = length *$self->{Pending}; *$self->{Pending} = '' ; return $len ; } else { my $len = 0; $len = $self->_raw_read($buffer) while ! *$self->{EndStream} && $len == 0 ; return $len ; } } # Need to jump through more hoops - either length or offset # or both are specified. my $out_buffer = *$self->{Pending} ; *$self->{Pending} = ''; while (! *$self->{EndStream} && length($out_buffer) < $length) { my $buf_len = $self->_raw_read(\$out_buffer); return $buf_len if $buf_len < 0 ; } $length = length $out_buffer if length($out_buffer) < $length ; return 0 if $length == 0 ; $$buffer = '' if ! defined $$buffer; $offset = length $$buffer if *$self->{AppendOutput} ; *$self->{Pending} = $out_buffer; $out_buffer = \*$self->{Pending} ; #substr($$buffer, $offset) = substr($$out_buffer, 0, $length, '') ; substr($$buffer, $offset) = substr($$out_buffer, 0, $length) ; substr($$out_buffer, 0, $length) = '' ; return $length ; } sub _getline { my $self = shift ; # Slurp Mode if ( ! defined $/ ) { my $data ; 1 while $self->read($data) > 0 ; return \$data ; } # Record Mode if ( ref $/ eq 'SCALAR' && ${$/} =~ /^\d+$/ && ${$/} > 0) { my $reclen = ${$/} ; my $data ; $self->read($data, $reclen) ; return \$data ; } # Paragraph Mode if ( ! length $/ ) { my $paragraph ; while ($self->read($paragraph) > 0 ) { if ($paragraph =~ s/^(.*?\n\n+)//s) { *$self->{Pending} = $paragraph ; my $par = $1 ; return \$par ; } } return \$paragraph; } # $/ isn't empty, or a reference, so it's Line Mode. { my $line ; my $offset; my $p = \*$self->{Pending} ; if (length(*$self->{Pending}) && ($offset = index(*$self->{Pending}, $/)) >=0) { my $l = substr(*$self->{Pending}, 0, $offset + length $/ ); substr(*$self->{Pending}, 0, $offset + length $/) = ''; return \$l; } while ($self->read($line) > 0 ) { my $offset = index($line, $/); if ($offset >= 0) { my $l = substr($line, 0, $offset + length $/ ); substr($line, 0, $offset + length $/) = ''; $$p = $line; return \$l; } } return \$line; } } sub getline { my $self = shift; my $current_append = *$self->{AppendOutput} ; *$self->{AppendOutput} = 1; my $lineref = $self->_getline(); $. = ++ *$self->{LineNo} if defined $$lineref ; *$self->{AppendOutput} = $current_append; return $$lineref ; } sub getlines { my $self = shift; $self->croakError(*$self->{ClassName} . "::getlines: called in scalar context\n") unless wantarray; my($line, @lines); push(@lines, $line) while defined($line = $self->getline); return @lines; } sub READLINE { goto &getlines if wantarray; goto &getline; } sub getc { my $self = shift; my $buf; return $buf if $self->read($buf, 1); return undef; } sub ungetc { my $self = shift; *$self->{Pending} = "" unless defined *$self->{Pending} ; *$self->{Pending} = $_[0] . *$self->{Pending} ; } sub trailingData { my $self = shift ; if (defined *$self->{FH} || defined *$self->{InputEvent} ) { return *$self->{Prime} ; } else { my $buf = *$self->{Buffer} ; my $offset = *$self->{BufferOffset} ; return substr($$buf, $offset) ; } } sub eof { my $self = shift ; return (*$self->{Closed} || (!length *$self->{Pending} && ( $self->smartEof() || *$self->{EndStream}))) ; } sub tell { my $self = shift ; my $in ; if (*$self->{Plain}) { $in = *$self->{PlainBytesRead} ; } else { $in = *$self->{TotalInflatedBytesRead} ; } my $pending = length *$self->{Pending} ; return 0 if $pending > $in ; return $in - $pending ; } sub close { # todo - what to do if close is called before the end of the gzip file # do we remember any trailing data? my $self = shift ; return 1 if *$self->{Closed} ; untie *$self if $] >= 5.008 ; my $status = 1 ; if (defined *$self->{FH}) { if ((! *$self->{Handle} || *$self->{AutoClose}) && ! *$self->{StdIO}) { #if ( *$self->{AutoClose}) { local $.; $! = 0 ; $status = *$self->{FH}->close(); return $self->saveErrorString(0, $!, $!) if !*$self->{InNew} && $self->saveStatus($!) != 0 ; } delete *$self->{FH} ; $! = 0 ; } *$self->{Closed} = 1 ; return 1; } sub DESTROY { my $self = shift ; local ($., $@, $!, $^E, $?); $self->close() ; } sub seek { my $self = shift ; my $position = shift; my $whence = shift ; my $here = $self->tell() ; my $target = 0 ; if ($whence == SEEK_SET) { $target = $position ; } elsif ($whence == SEEK_CUR) { $target = $here + $position ; } elsif ($whence == SEEK_END) { $target = $position ; $self->croakError(*$self->{ClassName} . "::seek: SEEK_END not allowed") ; } else { $self->croakError(*$self->{ClassName} ."::seek: unknown value, $whence, for whence parameter"); } # short circuit if seeking to current offset if ($target == $here) { # On ordinary filehandles, seeking to the current # position also clears the EOF condition, so we # emulate this behavior locally while simultaneously # cascading it to the underlying filehandle if (*$self->{Plain}) { *$self->{EndStream} = 0; seek(*$self->{FH},0,1) if *$self->{FH}; } return 1; } # Outlaw any attempt to seek backwards $self->croakError( *$self->{ClassName} ."::seek: cannot seek backwards") if $target < $here ; # Walk the file to the new offset my $offset = $target - $here ; my $got; while (($got = $self->read(my $buffer, min($offset, *$self->{BlockSize})) ) > 0) { $offset -= $got; last if $offset == 0 ; } $here = $self->tell() ; return $offset == 0 ? 1 : 0 ; } sub fileno { my $self = shift ; return defined *$self->{FH} ? fileno *$self->{FH} : undef ; } sub binmode { 1; # my $self = shift ; # return defined *$self->{FH} # ? binmode *$self->{FH} # : 1 ; } sub opened { my $self = shift ; return ! *$self->{Closed} ; } sub autoflush { my $self = shift ; return defined *$self->{FH} ? *$self->{FH}->autoflush(@_) : undef ; } sub input_line_number { my $self = shift ; my $last = *$self->{LineNo}; $. = *$self->{LineNo} = $_[1] if @_ ; return $last; } *BINMODE = \&binmode; *SEEK = \&seek; *READ = \&read; *sysread = \&read; *TELL = \&tell; *EOF = \&eof; *FILENO = \&fileno; *CLOSE = \&close; sub _notAvailable { my $name = shift ; #return sub { croak "$name Not Available" ; } ; return sub { croak "$name Not Available: File opened only for intput" ; } ; } *print = _notAvailable('print'); *PRINT = _notAvailable('print'); *printf = _notAvailable('printf'); *PRINTF = _notAvailable('printf'); *write = _notAvailable('write'); *WRITE = _notAvailable('write'); #*sysread = \&read; #*syswrite = \&_notAvailable; package IO::Uncompress::Base ; 1 ; __END__ #line 1475 FILE 46ea05bd/IO/Uncompress/Gunzip.pm+#line 1 "/usr/local/share/perl/5.10.1/IO/Uncompress/Gunzip.pm" package IO::Uncompress::Gunzip ; require 5.004 ; # for RFC1952 use strict ; use warnings; use bytes; use IO::Uncompress::RawInflate 2.030 ; use Compress::Raw::Zlib 2.030 qw( crc32 ) ; use IO::Compress::Base::Common 2.030 qw(:Status createSelfTiedObject); use IO::Compress::Gzip::Constants 2.030 ; use IO::Compress::Zlib::Extra 2.030 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $GunzipError); @ISA = qw( Exporter IO::Uncompress::RawInflate ); @EXPORT_OK = qw( $GunzipError gunzip ); %EXPORT_TAGS = %IO::Uncompress::RawInflate::DEFLATE_CONSTANTS ; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); $GunzipError = ''; $VERSION = '2.030'; sub new { my $class = shift ; $GunzipError = ''; my $obj = createSelfTiedObject($class, \$GunzipError); $obj->_create(undef, 0, @_); } sub gunzip { my $obj = createSelfTiedObject(undef, \$GunzipError); return $obj->_inf(@_) ; } sub getExtraParams { use IO::Compress::Base::Common 2.030 qw(:Parse); return ( 'ParseExtra' => [1, 1, Parse_boolean, 0] ) ; } sub ckParams { my $self = shift ; my $got = shift ; # gunzip always needs crc32 $got->value('CRC32' => 1); return 1; } sub ckMagic { my $self = shift; my $magic ; $self->smartReadExact(\$magic, GZIP_ID_SIZE); *$self->{HeaderPending} = $magic ; return $self->HeaderError("Minimum header size is " . GZIP_MIN_HEADER_SIZE . " bytes") if length $magic != GZIP_ID_SIZE ; return $self->HeaderError("Bad Magic") if ! isGzipMagic($magic) ; *$self->{Type} = 'rfc1952'; return $magic ; } sub readHeader { my $self = shift; my $magic = shift; return $self->_readGzipHeader($magic); } sub chkTrailer { my $self = shift; my $trailer = shift; # Check CRC & ISIZE my ($CRC32, $ISIZE) = unpack("V V", $trailer) ; *$self->{Info}{CRC32} = $CRC32; *$self->{Info}{ISIZE} = $ISIZE; if (*$self->{Strict}) { return $self->TrailerError("CRC mismatch") if $CRC32 != *$self->{Uncomp}->crc32() ; my $exp_isize = *$self->{UnCompSize}->get32bit(); return $self->TrailerError("ISIZE mismatch. Got $ISIZE" . ", expected $exp_isize") if $ISIZE != $exp_isize ; } return STATUS_OK; } sub isGzipMagic { my $buffer = shift ; return 0 if length $buffer < GZIP_ID_SIZE ; my ($id1, $id2) = unpack("C C", $buffer) ; return $id1 == GZIP_ID1 && $id2 == GZIP_ID2 ; } sub _readFullGzipHeader($) { my ($self) = @_ ; my $magic = '' ; $self->smartReadExact(\$magic, GZIP_ID_SIZE); *$self->{HeaderPending} = $magic ; return $self->HeaderError("Minimum header size is " . GZIP_MIN_HEADER_SIZE . " bytes") if length $magic != GZIP_ID_SIZE ; return $self->HeaderError("Bad Magic") if ! isGzipMagic($magic) ; my $status = $self->_readGzipHeader($magic); delete *$self->{Transparent} if ! defined $status ; return $status ; } sub _readGzipHeader($) { my ($self, $magic) = @_ ; my ($HeaderCRC) ; my ($buffer) = '' ; $self->smartReadExact(\$buffer, GZIP_MIN_HEADER_SIZE - GZIP_ID_SIZE) or return $self->HeaderError("Minimum header size is " . GZIP_MIN_HEADER_SIZE . " bytes") ; my $keep = $magic . $buffer ; *$self->{HeaderPending} = $keep ; # now split out the various parts my ($cm, $flag, $mtime, $xfl, $os) = unpack("C C V C C", $buffer) ; $cm == GZIP_CM_DEFLATED or return $self->HeaderError("Not Deflate (CM is $cm)") ; # check for use of reserved bits return $self->HeaderError("Use of Reserved Bits in FLG field.") if $flag & GZIP_FLG_RESERVED ; my $EXTRA ; my @EXTRA = () ; if ($flag & GZIP_FLG_FEXTRA) { $EXTRA = "" ; $self->smartReadExact(\$buffer, GZIP_FEXTRA_HEADER_SIZE) or return $self->TruncatedHeader("FEXTRA Length") ; my ($XLEN) = unpack("v", $buffer) ; $self->smartReadExact(\$EXTRA, $XLEN) or return $self->TruncatedHeader("FEXTRA Body"); $keep .= $buffer . $EXTRA ; if ($XLEN && *$self->{'ParseExtra'}) { my $bad = IO::Compress::Zlib::Extra::parseRawExtra($EXTRA, \@EXTRA, 1, 1); return $self->HeaderError($bad) if defined $bad; } } my $origname ; if ($flag & GZIP_FLG_FNAME) { $origname = "" ; while (1) { $self->smartReadExact(\$buffer, 1) or return $self->TruncatedHeader("FNAME"); last if $buffer eq GZIP_NULL_BYTE ; $origname .= $buffer } $keep .= $origname . GZIP_NULL_BYTE ; return $self->HeaderError("Non ISO 8859-1 Character found in Name") if *$self->{Strict} && $origname =~ /$GZIP_FNAME_INVALID_CHAR_RE/o ; } my $comment ; if ($flag & GZIP_FLG_FCOMMENT) { $comment = ""; while (1) { $self->smartReadExact(\$buffer, 1) or return $self->TruncatedHeader("FCOMMENT"); last if $buffer eq GZIP_NULL_BYTE ; $comment .= $buffer } $keep .= $comment . GZIP_NULL_BYTE ; return $self->HeaderError("Non ISO 8859-1 Character found in Comment") if *$self->{Strict} && $comment =~ /$GZIP_FCOMMENT_INVALID_CHAR_RE/o ; } if ($flag & GZIP_FLG_FHCRC) { $self->smartReadExact(\$buffer, GZIP_FHCRC_SIZE) or return $self->TruncatedHeader("FHCRC"); $HeaderCRC = unpack("v", $buffer) ; my $crc16 = crc32($keep) & 0xFF ; return $self->HeaderError("CRC16 mismatch.") if *$self->{Strict} && $crc16 != $HeaderCRC; $keep .= $buffer ; } # Assume compression method is deflated for xfl tests #if ($xfl) { #} *$self->{Type} = 'rfc1952'; return { 'Type' => 'rfc1952', 'FingerprintLength' => 2, 'HeaderLength' => length $keep, 'TrailerLength' => GZIP_TRAILER_SIZE, 'Header' => $keep, 'isMinimalHeader' => $keep eq GZIP_MINIMUM_HEADER ? 1 : 0, 'MethodID' => $cm, 'MethodName' => $cm == GZIP_CM_DEFLATED ? "Deflated" : "Unknown" , 'TextFlag' => $flag & GZIP_FLG_FTEXT ? 1 : 0, 'HeaderCRCFlag' => $flag & GZIP_FLG_FHCRC ? 1 : 0, 'NameFlag' => $flag & GZIP_FLG_FNAME ? 1 : 0, 'CommentFlag' => $flag & GZIP_FLG_FCOMMENT ? 1 : 0, 'ExtraFlag' => $flag & GZIP_FLG_FEXTRA ? 1 : 0, 'Name' => $origname, 'Comment' => $comment, 'Time' => $mtime, 'OsID' => $os, 'OsName' => defined $GZIP_OS_Names{$os} ? $GZIP_OS_Names{$os} : "Unknown", 'HeaderCRC' => $HeaderCRC, 'Flags' => $flag, 'ExtraFlags' => $xfl, 'ExtraFieldRaw' => $EXTRA, 'ExtraField' => [ @EXTRA ], #'CompSize'=> $compsize, #'CRC32'=> $CRC32, #'OrigSize'=> $ISIZE, } } 1; __END__ #line 1112 FILE$c9d79270/IO/Uncompress/RawInflate.pm"#line 1 "/usr/local/share/perl/5.10.1/IO/Uncompress/RawInflate.pm" package IO::Uncompress::RawInflate ; # for RFC1951 use strict ; use warnings; use bytes; use Compress::Raw::Zlib 2.030 ; use IO::Compress::Base::Common 2.030 qw(:Status createSelfTiedObject); use IO::Uncompress::Base 2.030 ; use IO::Uncompress::Adapter::Inflate 2.030 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $RawInflateError); $VERSION = '2.030'; $RawInflateError = ''; @ISA = qw( Exporter IO::Uncompress::Base ); @EXPORT_OK = qw( $RawInflateError rawinflate ) ; %DEFLATE_CONSTANTS = (); %EXPORT_TAGS = %IO::Uncompress::Base::EXPORT_TAGS ; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); #{ # # Execute at runtime # my %bad; # for my $module (qw(Compress::Raw::Zlib IO::Compress::Base::Common IO::Uncompress::Base IO::Uncompress::Adapter::Inflate)) # { # my $ver = ${ $module . "::VERSION"} ; # # $bad{$module} = $ver # if $ver ne $VERSION; # } # # if (keys %bad) # { # my $string = join "\n", map { "$_ $bad{$_}" } keys %bad; # die caller(0)[0] . "needs version $VERSION mismatch\n$string\n"; # } #} sub new { my $class = shift ; my $obj = createSelfTiedObject($class, \$RawInflateError); $obj->_create(undef, 0, @_); } sub rawinflate { my $obj = createSelfTiedObject(undef, \$RawInflateError); return $obj->_inf(@_); } sub getExtraParams { return (); } sub ckParams { my $self = shift ; my $got = shift ; return 1; } sub mkUncomp { my $self = shift ; my $got = shift ; my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::Inflate::mkUncompObject( $got->value('CRC32'), $got->value('ADLER32'), $got->value('Scan'), ); return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; *$self->{Uncomp} = $obj; my $magic = $self->ckMagic() or return 0; *$self->{Info} = $self->readHeader($magic) or return undef ; return 1; } sub ckMagic { my $self = shift; return $self->_isRaw() ; } sub readHeader { my $self = shift; my $magic = shift ; return { 'Type' => 'rfc1951', 'FingerprintLength' => 0, 'HeaderLength' => 0, 'TrailerLength' => 0, 'Header' => '' }; } sub chkTrailer { return STATUS_OK ; } sub _isRaw { my $self = shift ; my $got = $self->_isRawx(@_); if ($got) { *$self->{Pending} = *$self->{HeaderPending} ; } else { $self->pushBack(*$self->{HeaderPending}); *$self->{Uncomp}->reset(); } *$self->{HeaderPending} = ''; return $got ; } sub _isRawx { my $self = shift ; my $magic = shift ; $magic = '' unless defined $magic ; my $buffer = ''; $self->smartRead(\$buffer, *$self->{BlockSize}) >= 0 or return $self->saveErrorString(undef, "No data to read"); my $temp_buf = $magic . $buffer ; *$self->{HeaderPending} = $temp_buf ; $buffer = ''; my $status = *$self->{Uncomp}->uncompr(\$temp_buf, \$buffer, $self->smartEof()) ; return $self->saveErrorString(undef, *$self->{Uncomp}{Error}, STATUS_ERROR) if $status == STATUS_ERROR; $self->pushBack($temp_buf) ; return $self->saveErrorString(undef, "unexpected end of file", STATUS_ERROR) if $self->smartEof() && $status != STATUS_ENDSTREAM; #my $buf_len = *$self->{Uncomp}->uncompressedBytes(); my $buf_len = length $buffer; if ($status == STATUS_ENDSTREAM) { if (*$self->{MultiStream} && (length $temp_buf || ! $self->smartEof())){ *$self->{NewStream} = 1 ; *$self->{EndStream} = 0 ; } else { *$self->{EndStream} = 1 ; } } *$self->{HeaderPending} = $buffer ; *$self->{InflatedBytesRead} = $buf_len ; *$self->{TotalInflatedBytesRead} += $buf_len ; *$self->{Type} = 'rfc1951'; $self->saveStatus(STATUS_OK); return { 'Type' => 'rfc1951', 'HeaderLength' => 0, 'TrailerLength' => 0, 'Header' => '' }; } sub inflateSync { my $self = shift ; # inflateSync is a no-op in Plain mode return 1 if *$self->{Plain} ; return 0 if *$self->{Closed} ; #return G_EOF if !length *$self->{Pending} && *$self->{EndStream} ; return 0 if ! length *$self->{Pending} && *$self->{EndStream} ; # Disable CRC check *$self->{Strict} = 0 ; my $status ; while (1) { my $temp_buf ; if (length *$self->{Pending} ) { $temp_buf = *$self->{Pending} ; *$self->{Pending} = ''; } else { $status = $self->smartRead(\$temp_buf, *$self->{BlockSize}) ; return $self->saveErrorString(0, "Error Reading Data") if $status < 0 ; if ($status == 0 ) { *$self->{EndStream} = 1 ; return $self->saveErrorString(0, "unexpected end of file", STATUS_ERROR); } } $status = *$self->{Uncomp}->sync($temp_buf) ; if ($status == STATUS_OK) { *$self->{Pending} .= $temp_buf ; return 1 ; } last unless $status == STATUS_ERROR ; } return 0; } #sub performScan #{ # my $self = shift ; # # my $status ; # my $end_offset = 0; # # $status = $self->scan() # #or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $self->errorNo) ; # or return $self->saveErrorString(G_ERR, "Error Scanning: $status") # # $status = $self->zap($end_offset) # or return $self->saveErrorString(G_ERR, "Error Zapping: $status"); # #or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $self->errorNo) ; # # #(*$obj->{Deflate}, $status) = $inf->createDeflate(); # ## *$obj->{Header} = *$inf->{Info}{Header}; ## *$obj->{UnCompSize_32bit} = ## *$obj->{BytesWritten} = *$inf->{UnCompSize_32bit} ; ## *$obj->{CompSize_32bit} = *$inf->{CompSize_32bit} ; # # ## if ( $outType eq 'buffer') ## { substr( ${ *$self->{Buffer} }, $end_offset) = '' } ## elsif ($outType eq 'handle' || $outType eq 'filename') { ## *$self->{FH} = *$inf->{FH} ; ## delete *$inf->{FH}; ## *$obj->{FH}->flush() ; ## *$obj->{Handle} = 1 if $outType eq 'handle'; ## ## #seek(*$obj->{FH}, $end_offset, SEEK_SET) ## *$obj->{FH}->seek($end_offset, SEEK_SET) ## or return $obj->saveErrorString(undef, $!, $!) ; ## } # #} sub scan { my $self = shift ; return 1 if *$self->{Closed} ; return 1 if !length *$self->{Pending} && *$self->{EndStream} ; my $buffer = '' ; my $len = 0; $len = $self->_raw_read(\$buffer, 1) while ! *$self->{EndStream} && $len >= 0 ; #return $len if $len < 0 ? $len : 0 ; return $len < 0 ? 0 : 1 ; } sub zap { my $self = shift ; my $headerLength = *$self->{Info}{HeaderLength}; my $block_offset = $headerLength + *$self->{Uncomp}->getLastBlockOffset(); $_[0] = $headerLength + *$self->{Uncomp}->getEndOffset(); #printf "# End $_[0], headerlen $headerLength \n";; #printf "# block_offset $block_offset %x\n", $block_offset; my $byte ; ( $self->smartSeek($block_offset) && $self->smartRead(\$byte, 1) ) or return $self->saveErrorString(0, $!, $!); #printf "#byte is %x\n", unpack('C*',$byte); *$self->{Uncomp}->resetLastBlockByte($byte); #printf "#to byte is %x\n", unpack('C*',$byte); ( $self->smartSeek($block_offset) && $self->smartWrite($byte) ) or return $self->saveErrorString(0, $!, $!); #$self->smartSeek($end_offset, 1); return 1 ; } sub createDeflate { my $self = shift ; my ($def, $status) = *$self->{Uncomp}->createDeflateStream( -AppendOutput => 1, -WindowBits => - MAX_WBITS, -CRC32 => *$self->{Params}->value('CRC32'), -ADLER32 => *$self->{Params}->value('ADLER32'), ); return wantarray ? ($status, $def) : $def ; } 1; __END__ #line 1111 FILE92ab67dd/PAR.pmo#line 1 "/usr/local/share/perl/5.10.1/PAR.pm" package PAR; $PAR::VERSION = '1.002'; use 5.006; use strict; use warnings; use Config '%Config'; use Carp qw/croak/; # If the 'prefork' module is available, we # register various run-time loaded modules with it. # That way, there is more shared memory in a forking # environment. BEGIN { if (eval 'require prefork') { prefork->import($_) for qw/ Archive::Zip File::Glob File::Spec File::Temp LWP::Simple PAR::Heavy /; # not including Archive::Unzip::Burst which only makes sense # in the context of a PAR::Packer'ed executable anyway. } } use PAR::SetupProgname; use PAR::SetupTemp; #line 311 use vars qw(@PAR_INC); # explicitly stated PAR library files (preferred) use vars qw(@PAR_INC_LAST); # explicitly stated PAR library files (fallback) use vars qw(%PAR_INC); # sets {$par}{$file} for require'd modules use vars qw(@LibCache %LibCache); # I really miss pseudohash. use vars qw($LastAccessedPAR $LastTempFile); use vars qw(@RepositoryObjects); # If we have PAR::Repository::Client support, we # put the ::Client objects in here. use vars qw(@PriorityRepositoryObjects); # repositories which are preferred over local stuff use vars qw(@UpgradeRepositoryObjects); # If we have PAR::Repository::Client's in upgrade mode # put the ::Client objects in here *as well*. use vars qw(%FileCache); # The Zip-file file-name-cache # Layout: # $FileCache{$ZipObj}{$FileName} = $Member use vars qw(%ArchivesExtracted); # Associates archive-zip-object => full extraction path my $ver = $Config{version}; my $arch = $Config{archname}; my $progname = $ENV{PAR_PROGNAME} || $0; my $is_insensitive_fs = ( -s $progname and (-s lc($progname) || -1) == (-s uc($progname) || -1) and (-s lc($progname) || -1) == -s $progname ); # lexical for import(), and _import_foo() functions to control unpar() my %unpar_options; # called on "use PAR" sub import { my $class = shift; PAR::SetupProgname::set_progname(); PAR::SetupTemp::set_par_temp_env(); $progname = $ENV{PAR_PROGNAME} ||= $0; $is_insensitive_fs = (-s $progname and (-s lc($progname) || -1) == (-s uc($progname) || -1)); my @args = @_; # Insert PAR hook in @INC. unshift @INC, \&find_par unless grep { $_ eq \&find_par } @INC; push @INC, \&find_par_last unless grep { $_ eq \&find_par_last } @INC; # process args to use PAR 'foo.par', { opts }, ...; foreach my $par (@args) { if (ref($par) eq 'HASH') { # we have been passed a hash reference _import_hash_ref($par); } elsif ($par =~ /[?*{}\[\]]/) { # implement globbing for PAR archives require File::Glob; foreach my $matched (File::Glob::glob($par)) { push @PAR_INC, unpar($matched, undef, undef, 1); } } else { # ordinary string argument => file push @PAR_INC, unpar($par, undef, undef, 1); } } return if $PAR::__import; local $PAR::__import = 1; require PAR::Heavy; PAR::Heavy::_init_dynaloader(); # The following code is executed for the case where the # running program is itself a PAR archive. # ==> run script/main.pl if (unpar($progname)) { # XXX - handle META.yml here! push @PAR_INC, unpar($progname, undef, undef, 1); _extract_inc($progname) unless $ENV{PAR_CLEAN}; if ($LibCache{$progname}) { # XXX bad: this us just a good guess require File::Spec; $ArchivesExtracted{$progname} = File::Spec->catdir($ENV{PAR_TEMP}, 'inc'); } my $zip = $LibCache{$progname}; my $member = _first_member( $zip, "script/main.pl", "main.pl", ); if ($progname and !$member) { require File::Spec; my @path = File::Spec->splitdir($progname); my $filename = pop @path; $member = _first_member( $zip, "script/".$filename, "script/".$filename.".pl", $filename, $filename.".pl", ) } # finally take $ARGV[0] as the hint for file to run if (defined $ARGV[0] and !$member) { $member = _first_member( $zip, "script/$ARGV[0]", "script/$ARGV[0].pl", $ARGV[0], "$ARGV[0].pl", ) or die qq(PAR.pm: Can't open perl script "$ARGV[0]": No such file or directory); shift @ARGV; } if (!$member) { die "Usage: $0 script_file_name.\n"; } _run_member($member); } } # import() helper for the "use PAR {...};" syntax. sub _import_hash_ref { my $opt = shift; # hash slice assignment -- pass all of the options into unpar local @unpar_options{keys(%$opt)} = values(%$opt); # check for incompatible options: if ( exists $opt->{repository} and exists $opt->{file} ) { croak("Invalid PAR loading options. Cannot have a 'repository' and 'file' option at the same time."); } elsif ( exists $opt->{file} and (exists $opt->{install} or exists $opt->{upgrade}) ) { my $e = exists($opt->{install}) ? 'install' : 'upgrade'; croak("Invalid PAR loading options. Cannot combine 'file' and '$e' options."); } elsif ( not exists $opt->{repository} and not exists $opt->{file} ) { croak("Invalid PAR loading options. Need at least one of 'file' or 'repository' options."); } # load from file if (exists $opt->{file}) { croak("Cannot load undefined PAR archive") if not defined $opt->{file}; # for files, we default to loading from PAR archive first my $fallback = $opt->{fallback}; $fallback = 0 if not defined $fallback; if (not $fallback) { # load from this PAR arch preferably push @PAR_INC, unpar($opt->{file}, undef, undef, 1); } else { # load from this PAR arch as fallback push @PAR_INC_LAST, unpar($opt->{file}, undef, undef, 1); } } else { # Deal with repositories elsewhere my $client = _import_repository($opt); return() if not $client; if (defined $opt->{run}) { # run was specified # run the specified script from the repository $client->run_script( $opt->{run} ); return 1; } return 1; } # run was specified # run the specified script from inside the PAR file. if (defined $opt->{run}) { my $script = $opt->{run}; require PAR::Heavy; PAR::Heavy::_init_dynaloader(); # XXX - handle META.yml here! _extract_inc($opt->{file}) unless $ENV{PAR_CLEAN}; my $zip = $LibCache{$opt->{file}}; my $member = _first_member( $zip, (($script !~ /^script\//) ? ("script/$script", "script/$script.pl") : ()), $script, "$script.pl", ); if (not defined $member) { croak("Cannot run script '$script' from PAR file '$opt->{file}'. Script couldn't be found in PAR file."); } _run_member_from_par($member); } return(); } # This sub is invoked by _import_hash_ref if a {repository} # option is found # Returns the repository client object on success. sub _import_repository { my $opt = shift; my $url = $opt->{repository}; eval "require PAR::Repository::Client; 1;"; if ($@ or not eval PAR::Repository::Client->VERSION >= 0.04) { croak "In order to use the 'use PAR { repository => 'url' };' syntax, you need to install the PAR::Repository::Client module (version 0.04 or later) from CPAN. This module does not seem to be installed as indicated by the following error message: $@"; } if ($opt->{upgrade} and not eval PAR::Repository::Client->VERSION >= 0.22) { croak "In order to use the 'upgrade' option, you need to install the PAR::Repository::Client module (version 0.22 or later) from CPAN"; } if ($opt->{dependencies} and not eval PAR::Repository::Client->VERSION >= 0.23) { croak "In order to use the 'dependencies' option, you need to install the PAR::Repository::Client module (version 0.23 or later) from CPAN"; } my $obj; # Support existing clients passed in as objects. if (ref($url) and UNIVERSAL::isa($obj, 'PAR::Repository::Client')) { $obj = $url; } else { $obj = PAR::Repository::Client->new( uri => $url, auto_install => $opt->{install}, auto_upgrade => $opt->{upgrade}, static_dependencies => $opt->{dependencies}, ); } if (exists($opt->{fallback}) and not $opt->{fallback}) { push @PriorityRepositoryObjects, $obj; # repository beats local stuff } else { push @RepositoryObjects, $obj; # local stuff beats repository } # these are tracked separately so we can check for upgrades early push @UpgradeRepositoryObjects, $obj if $opt->{upgrade}; return $obj; } # Given an Archive::Zip obj and a list of files/paths, # this function returns the Archive::Zip::Member for the # first of the files found in the ZIP. If none is found, # returns the empty list. sub _first_member { my $zip = shift; foreach my $name (@_) { my $member = _cached_member_named($zip, $name); return $member if $member; } return; } # Given an Archive::Zip object, this finds the first # Archive::Zip member whose file name matches the # regular expression sub _first_member_matching { my $zip = shift; my $regex = shift; my $cache = $FileCache{$zip}; $cache = $FileCache{$zip} = _make_file_cache($zip) if not $cache; foreach my $name (keys %$cache) { if ($name =~ $regex) { return $cache->{$name}; } } return(); } sub _run_member_from_par { my $member = shift; my $clear_stack = shift; my ($fh, $is_new, $filename) = _tempfile($member->crc32String . ".pl"); if ($is_new) { my $file = $member->fileName; print $fh "package main;\n"; print $fh "#line 1 \"$file\"\n"; $member->extractToFileHandle($fh); seek ($fh, 0, 0); } $ENV{PAR_0} = $filename; # for Pod::Usage { do $filename; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; exit; } } sub _run_member { my $member = shift; my $clear_stack = shift; my ($fh, $is_new, $filename) = _tempfile($member->crc32String . ".pl"); if ($is_new) { my $file = $member->fileName; print $fh "package main; shift \@INC;\n"; if (defined &Internals::PAR::CLEARSTACK and $clear_stack) { print $fh "Internals::PAR::CLEARSTACK();\n"; } print $fh "#line 1 \"$file\"\n"; $member->extractToFileHandle($fh); seek ($fh, 0, 0); } unshift @INC, sub { $fh }; $ENV{PAR_0} = $filename; # for Pod::Usage { do 'main'; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; exit; } } sub _run_external_file { my $filename = shift; my $clear_stack = shift; require 5.008; open my $ffh, '<', $filename or die "Can't open perl script \"$filename\": $!"; my $clearstack = ''; if (defined &Internals::PAR::CLEARSTACK and $clear_stack) { $clear_stack = "Internals::PAR::CLEARSTACK();\n"; } my $string = "package main; shift \@INC;\n$clearstack#line 1 \"$filename\"\n" . do { local $/ = undef; <$ffh> }; close $ffh; open my $fh, '<', \$string or die "Can't open file handle to string: $!"; unshift @INC, sub { $fh }; $ENV{PAR_0} = $filename; # for Pod::Usage { do 'main'; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; exit; } } # extract the contents of a .par (or .exe) or any # Archive::Zip handle to the PAR_TEMP/inc directory. # returns that directory. sub _extract_inc { my $file_or_azip_handle = shift; my $force_extract = shift; my $inc = "$PAR::SetupTemp::PARTemp/inc"; my $dlext = defined($Config{dlext}) ? $Config::Config{dlext} : ''; my $inc_exists = -d $inc; my $is_handle = ref($file_or_azip_handle) && $file_or_azip_handle->isa('Archive::Zip::Archive'); require File::Spec; if (!$inc_exists or $force_extract) { for (1 .. 10) { mkdir("$inc.lock", 0755) and last; sleep 1 } undef $@; if (!$is_handle) { # First try to unzip the *fast* way. eval { require Archive::Unzip::Burst; Archive::Unzip::Burst::unzip($file_or_azip_handle, $inc) and die "Could not unzip '$file_or_azip_handle' into '$inc'. Error: $!"; die; }; # This means the fast module is there, but didn't work. if ($@ =~ /^Could not unzip/) { die $@; } } # either failed to load Archive::Unzip::Burst or got an A::Zip handle # fallback to slow way. if ($is_handle || $@) { my $zip; if (!$is_handle) { open my $fh, '<', $file_or_azip_handle or die "Cannot find '$file_or_azip_handle': $!"; binmode($fh); bless($fh, 'IO::File'); $zip = Archive::Zip->new; ( $zip->readFromFileHandle($fh, $file_or_azip_handle) == Archive::Zip::AZ_OK() ) or die "Read '$file_or_azip_handle' error: $!"; } else { $zip = $file_or_azip_handle; } mkdir($inc) if not -d $inc; for ( $zip->memberNames() ) { s{^/}{}; # Skip DLLs (these will be handled by the dynaloader hook) # except for those placed in File::ShareDir directories. next if (m{\.\Q$dlext\E[^/]*$} && !m{^lib/auto/share/(dist|module)/}); my $outfile = File::Spec->catfile($inc, $_); next if -e $outfile and not -w _; $zip->extractMember($_, "$inc/" . $_); } } rmdir("$inc.lock"); $ArchivesExtracted{$is_handle ? $file_or_azip_handle->fileName() : $file_or_azip_handle} = $inc; } # add the freshly extracted directories to @INC, # but make sure there's no duplicates my %inc_exists = map { ($_, 1) } @INC; unshift @INC, grep !exists($inc_exists{$_}), grep -d, map File::Spec->catdir($inc, @$_), [ 'lib' ], [ 'arch' ], [ $arch ], [ $ver ], [ $ver, $arch ], []; return $inc; } # This is the hook placed in @INC for loading PAR's # before any other stuff in @INC sub find_par { my @args = @_; # if there are repositories in upgrade mode, check them # first. If so, this is expensive, of course! if (@UpgradeRepositoryObjects) { my $module = $args[1]; $module =~ s/\.pm$//; $module =~ s/\//::/g; foreach my $client (@UpgradeRepositoryObjects) { my $local_file = $client->upgrade_module($module); # break the require if upgrade_module has been required already # to avoid infinite recursion if (exists $INC{$args[1]}) { # Oh dear. Check for the possible return values of the INC sub hooks in # perldoc -f require before trying to understand this. # Then, realize that if you pass undef for the file handle, perl (5.8.9) # does NOT use the subroutine. Thus the hacky GLOB ref. my $line = 1; no warnings; return (\*I_AM_NOT_HERE, sub {$line ? ($_="1;",$line=0,return(1)) : ($_="",return(0))}); } # Note: This is likely not necessary as the module has been installed # into the system by upgrade_module if it was available at all. # If it was already loaded, this will not be reached (see return right above). # If it could not be loaded from the system and neither found in the repository, # we simply want to have the normal error message, too! # #if ($local_file) { # # XXX load with fallback - is that right? # return _find_par_internals([$PAR_INC_LAST[-1]], @args); #} } } my $rv = _find_par_internals(\@PAR_INC, @args); return $rv if defined $rv or not @PriorityRepositoryObjects; # the repositories that are prefered over locally installed modules my $module = $args[1]; $module =~ s/\.pm$//; $module =~ s/\//::/g; foreach my $client (@PriorityRepositoryObjects) { my $local_file = $client->get_module($module, 0); # 1 == fallback if ($local_file) { # Not loaded as fallback (cf. PRIORITY) thus look at PAR_INC # instead of PAR_INC_LAST return _find_par_internals([$PAR_INC[-1]], @args); } } return(); } # This is the hook placed in @INC for loading PAR's # AFTER any other stuff in @INC # It also deals with loading from repositories as a # fallback-fallback ;) sub find_par_last { my @args = @_; # Try the local PAR files first my $rv = _find_par_internals(\@PAR_INC_LAST, @args); return $rv if defined $rv; # No repositories => return return $rv if not @RepositoryObjects; my $module = $args[1]; $module =~ s/\.pm$//; $module =~ s/\//::/g; foreach my $client (@RepositoryObjects) { my $local_file = $client->get_module($module, 1); # 1 == fallback if ($local_file) { # Loaded as fallback thus look at PAR_INC_LAST return _find_par_internals([$PAR_INC_LAST[-1]], @args); } } return $rv; } # This routine implements loading modules from PARs # both for loading PARs preferably or as fallback. # To distinguish the cases, the first parameter should # be a reference to the corresponding @PAR_INC* array. sub _find_par_internals { my ($INC_ARY, $self, $file, $member_only) = @_; my $scheme; foreach (@$INC_ARY ? @$INC_ARY : @INC) { my $path = $_; if ($] < 5.008001) { # reassemble from "perl -Ischeme://path" autosplitting $path = "$scheme:$path" if !@$INC_ARY and $path and $path =~ m!//! and $scheme and $scheme =~ /^\w+$/; $scheme = $path; } my $rv = unpar($path, $file, $member_only, 1) or next; $PAR_INC{$path}{$file} = 1; $INC{$file} = $LastTempFile if (lc($file) =~ /^(?!tk).*\.pm$/); return $rv; } return; } sub reload_libs { my @par_files = @_; @par_files = sort keys %LibCache unless @par_files; foreach my $par (@par_files) { my $inc_ref = $PAR_INC{$par} or next; delete $LibCache{$par}; delete $FileCache{$par}; foreach my $file (sort keys %$inc_ref) { delete $INC{$file}; require $file; } } } #sub find_zip_member { # my $file = pop; # # foreach my $zip (@LibCache) { # my $member = _first_member($zip, $file) or next; # return $member; # } # # return; #} sub read_file { my $file = pop; foreach my $zip (@LibCache) { my $member = _first_member($zip, $file) or next; return scalar $member->contents; } return; } sub par_handle { my $par = pop; return $LibCache{$par}; } my %escapes; sub unpar { my ($par, $file, $member_only, $allow_other_ext) = @_; return if not defined $par; my $zip = $LibCache{$par}; my @rv = $par; # a guard against (currently unimplemented) recursion return if $PAR::__unpar; local $PAR::__unpar = 1; unless ($zip) { # URL use case ==> download if ($par =~ m!^\w+://!) { require File::Spec; require LWP::Simple; # reflector support $par .= "pm=$file" if $par =~ /[?&;]/; # prepare cache directory $ENV{PAR_CACHE} ||= '_par'; mkdir $ENV{PAR_CACHE}, 0777; if (!-d $ENV{PAR_CACHE}) { $ENV{PAR_CACHE} = File::Spec->catdir(File::Spec->tmpdir, 'par'); mkdir $ENV{PAR_CACHE}, 0777; return unless -d $ENV{PAR_CACHE}; } # Munge URL into local file name # FIXME: This might result in unbelievably long file names! # I have run into the file/path length limitations of linux # with similar code in PAR::Repository::Client. # I suspect this is even worse on Win32. # -- Steffen my $file = $par; if (!%escapes) { $escapes{chr($_)} = sprintf("%%%02X", $_) for 0..255; } { use bytes; $file =~ s/([^\w\.])/$escapes{$1}/g; } $file = File::Spec->catfile( $ENV{PAR_CACHE}, $file); LWP::Simple::mirror( $par, $file ); return unless -e $file and -f _; $par = $file; } # Got the .par as a string. (reference to scalar, of course) elsif (ref($par) eq 'SCALAR') { my ($fh) = _tempfile(); print $fh $$par; $par = $fh; } # If the par is not a valid .par file name and we're being strict # about this, then also check whether "$par.par" exists elsif (!(($allow_other_ext or $par =~ /\.par\z/i) and -f $par)) { $par .= ".par"; return unless -f $par; } require Archive::Zip; $zip = Archive::Zip->new; my @file; if (!ref $par) { @file = $par; open my $fh, '<', $par; binmode($fh); $par = $fh; bless($par, 'IO::File'); } Archive::Zip::setErrorHandler(sub {}); my $rv = $zip->readFromFileHandle($par, @file); Archive::Zip::setErrorHandler(undef); return unless $rv == Archive::Zip::AZ_OK(); push @LibCache, $zip; $LibCache{$_[0]} = $zip; $FileCache{$_[0]} = _make_file_cache($zip); # only recursive case -- appears to be unused and unimplemented foreach my $member ( _cached_members_matching($zip, "^par/(?:$Config{version}/)?(?:$Config{archname}/)?" ) ) { next if $member->isDirectory; my $content = $member->contents(); next unless $content =~ /^PK\003\004/; push @rv, unpar(\$content, undef, undef, 1); } # extract all shlib dlls from the .par to $ENV{PAR_TEMP} # Intended to fix problem with Alien::wxWidgets/Wx... # NOTE auto/foo/foo.so|dll will get handled by the dynaloader # hook, so no need to pull it out here. # Allow this to be disabled so caller can do their own caching # via import({no_shlib_unpack => 1, file => foo.par}) if(not $unpar_options{no_shlib_unpack} and defined $ENV{PAR_TEMP}) { my @members = _cached_members_matching( $zip, qr#^shlib/$Config{archname}/.*\.\Q$Config{dlext}\E(?:\.|$)# ); foreach my $member (@members) { next if $member->isDirectory; my $member_name = $member->fileName; next unless $member_name =~ m{ \/([^/]+)$ }x or $member_name =~ m{ ^([^/]+)$ }; my $extract_name = $1; my $dest_name = File::Spec->catfile($ENV{PAR_TEMP}, $extract_name); # but don't extract it if we've already got one $member->extractToFileNamed($dest_name) unless(-e $dest_name); } } # Now push this path into usual library search paths my $separator = $Config{path_sep}; my $tempdir = $ENV{PAR_TEMP}; foreach my $key (qw( LD_LIBRARY_PATH LIB_PATH LIBRARY_PATH PATH DYLD_LIBRARY_PATH )) { if (defined $ENV{$key} and $ENV{$key} ne '') { # Check whether it's already in the path. If so, don't # append the PAR temp dir in order not to overflow the # maximum length for ENV vars. $ENV{$key} .= $separator . $tempdir unless grep { $_ eq $tempdir } split $separator, $ENV{$key}; } else { $ENV{$key} = $tempdir; } } } $LastAccessedPAR = $zip; return @rv unless defined $file; my $member = _first_member($zip, "lib/$file", "arch/$file", "$arch/$file", "$ver/$file", "$ver/$arch/$file", $file, ) or return; return $member if $member_only; my ($fh, $is_new); ($fh, $is_new, $LastTempFile) = _tempfile($member->crc32String . ".pm"); die "Bad Things Happened..." unless $fh; if ($is_new) { $member->extractToFileHandle($fh); seek ($fh, 0, 0); } return $fh; } sub _tempfile { my ($fh, $filename); if ($ENV{PAR_CLEAN} or !@_) { require File::Temp; if (defined &File::Temp::tempfile) { # under Win32, the file is created with O_TEMPORARY, # and will be deleted by the C runtime; having File::Temp # delete it has the only effect of giving ugly warnings ($fh, $filename) = File::Temp::tempfile( DIR => $PAR::SetupTemp::PARTemp, UNLINK => ($^O ne 'MSWin32' and $^O !~ /hpux/), ) or die "Cannot create temporary file: $!"; binmode($fh); return ($fh, 1, $filename); } } require File::Spec; # untainting tempfile path local $_ = File::Spec->catfile( $PAR::SetupTemp::PARTemp, $_[0] ); /^(.+)$/ and $filename = $1; if (-r $filename) { open $fh, '<', $filename or die $!; binmode($fh); return ($fh, 0, $filename); } open $fh, '+>', $filename or die $!; binmode($fh); return ($fh, 1, $filename); } # Given an Archive::Zip object, this generates a hash of # file_name_in_zip => file object # and returns a reference to that. # If we broke the encapsulation of A::Zip::Member and # accessed $member->{fileName} directly, that would be # *significantly* faster. sub _make_file_cache { my $zip = shift; if (not ref($zip)) { croak("_make_file_cache needs an Archive::Zip object as argument."); } my $cache = {}; foreach my $member ($zip->members) { $cache->{$member->fileName()} = $member; } return $cache; } # given an Archive::Zip object, this finds the cached hash # of Archive::Zip member names => members, # and returns all member objects whose file names match # a regexp # Without file caching, it just uses $zip->membersMatching sub _cached_members_matching { my $zip = shift; my $regex = shift; my $cache = $FileCache{$zip}; $cache = $FileCache{$zip} = _make_file_cache($zip) if not $cache; return map {$cache->{$_}} grep { $_ =~ $regex } keys %$cache; } # access named zip file member through cache. Fall # back to using Archive::Zip (slow) sub _cached_member_named { my $zip = shift; my $name = shift; my $cache = $FileCache{$zip}; $cache = $FileCache{$zip} = _make_file_cache($zip) if not $cache; return $cache->{$name}; } # Attempt to clean up the temporary directory if # --> We're running in clean mode # --> It's defined # --> It's an existing directory # --> It's empty END { if (exists $ENV{PAR_CLEAN} and $ENV{PAR_CLEAN} and exists $ENV{PAR_TEMP} and defined $ENV{PAR_TEMP} and -d $ENV{PAR_TEMP} ) { local($!); # paranoid: ignore potential errors without clobbering a global variable! rmdir($ENV{PAR_TEMP}); } } 1; __END__ #line 1249 FILE0e14cc82/PAR/Dist.pmw#line 1 "/usr/local/share/perl/5.10.1/PAR/Dist.pm" package PAR::Dist; use 5.006; use strict; require Exporter; use vars qw/$VERSION @ISA @EXPORT @EXPORT_OK $DEBUG/; $VERSION = '0.47'; # Change version in POD, too! @ISA = 'Exporter'; @EXPORT = qw/ blib_to_par install_par uninstall_par sign_par verify_par merge_par remove_man get_meta generate_blib_stub /; @EXPORT_OK = qw/ parse_dist_name contains_binaries /; $DEBUG = 0; use Carp qw/carp croak/; use File::Spec; #line 142 sub blib_to_par { @_ = (path => @_) if @_ == 1; my %args = @_; require Config; # don't use 'my $foo ... if ...' it creates a static variable! my $quiet = $args{quiet} || 0; my $dist; my $path = $args{path}; $dist = File::Spec->rel2abs($args{dist}) if $args{dist}; my $name = $args{name}; my $version = $args{version}; my $suffix = $args{suffix} || "$Config::Config{archname}-$Config::Config{version}.par"; my $cwd; if (defined $path) { require Cwd; $cwd = Cwd::cwd(); chdir $path; } _build_blib() unless -d "blib"; my @files; open MANIFEST, ">", File::Spec->catfile("blib", "MANIFEST") or die $!; open META, ">", File::Spec->catfile("blib", "META.yml") or die $!; require File::Find; File::Find::find( sub { next unless $File::Find::name; (-r && !-d) and push ( @files, substr($File::Find::name, 5) ); } , 'blib' ); print MANIFEST join( "\n", ' ', (sort @files), q( # ) ); close MANIFEST; if (open(OLD_META, "META.yml")) { while () { if (/^distribution_type:/) { print META "distribution_type: par\n"; } else { print META $_; } if (/^name:\s+(.*)/) { $name ||= $1; $name =~ s/::/-/g; } elsif (/^version:\s+.*Module::Build::Version/) { while () { /^\s+original:\s+(.*)/ or next; $version ||= $1; last; } } elsif (/^version:\s+(.*)/) { $version ||= $1; } } close OLD_META; close META; } if ((!$name or !$version) and open(MAKEFILE, "Makefile")) { while () { if (/^DISTNAME\s+=\s+(.*)$/) { $name ||= $1; } elsif (/^VERSION\s+=\s+(.*)$/) { $version ||= $1; } } } if (not defined($name) or not defined($version)) { # could not determine name or version. Error. my $what; if (not defined $name) { $what = 'name'; $what .= ' and version' if not defined $version; } elsif (not defined $version) { $what = 'version'; } carp("I was unable to determine the $what of the PAR distribution. Please create a Makefile or META.yml file from which we can infer the information or just specify the missing information as an option to blib_to_par."); return(); } $name =~ s/\s+$//; $version =~ s/\s+$//; my $file = "$name-$version-$suffix"; unlink $file if -f $file; print META << "YAML" if fileno(META); name: $name version: $version build_requires: {} conflicts: {} dist_name: $file distribution_type: par dynamic_config: 0 generated_by: 'PAR::Dist version $PAR::Dist::VERSION' license: unknown YAML close META; mkdir('blib', 0777); chdir('blib'); require Cwd; my $zipoutfile = File::Spec->catfile(File::Spec->updir, $file); _zip(dist => $zipoutfile); chdir(File::Spec->updir); unlink File::Spec->catfile("blib", "MANIFEST"); unlink File::Spec->catfile("blib", "META.yml"); $dist ||= File::Spec->catfile($cwd, $file) if $cwd; if ($dist and $file ne $dist) { if ( File::Copy::copy($file, $dist) ) { unlink $file; } else { die "Cannot copy $file: $!"; } $file = $dist; } my $pathname = File::Spec->rel2abs($file); if ($^O eq 'MSWin32') { $pathname =~ s!\\!/!g; $pathname =~ s!:!|!g; }; print << "." if !$quiet; Successfully created binary distribution '$file'. Its contents are accessible in compliant browsers as: jar:file://$pathname!/MANIFEST . chdir $cwd if $cwd; return $file; } sub _build_blib { if (-e 'Build') { _system_wrapper($^X, "Build"); } elsif (-e 'Makefile') { _system_wrapper($Config::Config{make}); } elsif (-e 'Build.PL') { _system_wrapper($^X, "Build.PL"); _system_wrapper($^X, "Build"); } elsif (-e 'Makefile.PL') { _system_wrapper($^X, "Makefile.PL"); _system_wrapper($Config::Config{make}); } } #line 397 sub install_par { my %args = &_args; _install_or_uninstall(%args, action => 'install'); } #line 418 sub uninstall_par { my %args = &_args; _install_or_uninstall(%args, action => 'uninstall'); } sub _install_or_uninstall { my %args = &_args; my $name = $args{name}; my $action = $args{action}; my %ENV_copy = %ENV; $ENV{PERL_INSTALL_ROOT} = $args{prefix} if defined $args{prefix}; require Cwd; my $old_dir = Cwd::cwd(); my ($dist, $tmpdir) = _unzip_to_tmpdir( dist => $args{dist}, subdir => 'blib' ); if ( open (META, File::Spec->catfile('blib', 'META.yml')) ) { while () { next unless /^name:\s+(.*)/; $name = $1; $name =~ s/\s+$//; last; } close META; } return if not defined $name or $name eq ''; if (-d 'script') { require ExtUtils::MY; foreach my $file (glob("script/*")) { next unless -T $file; ExtUtils::MY->fixin($file); chmod(0555, $file); } } $name =~ s{::|-}{/}g; require ExtUtils::Install; if ($action eq 'install') { my $target = _installation_target( File::Spec->curdir, $name, \%args ); my $custom_targets = $args{custom_targets} || {}; $target->{$_} = $custom_targets->{$_} foreach keys %{$custom_targets}; my $uninstall_shadows = $args{uninstall_shadows}; my $verbose = $args{verbose}; ExtUtils::Install::install($target, $verbose, 0, $uninstall_shadows); } elsif ($action eq 'uninstall') { require Config; my $verbose = $args{verbose}; ExtUtils::Install::uninstall( $args{packlist_read}||"$Config::Config{installsitearch}/auto/$name/.packlist", $verbose ); } %ENV = %ENV_copy; chdir($old_dir); File::Path::rmtree([$tmpdir]); return 1; } # Returns the default installation target as used by # ExtUtils::Install::install(). First parameter should be the base # directory containing the blib/ we're installing from. # Second parameter should be the name of the distribution for the packlist # paths. Third parameter may be a hash reference with user defined keys for # the target hash. In fact, any contents that do not start with 'inst_' are # skipped. sub _installation_target { require Config; my $dir = shift; my $name = shift; my $user = shift || {}; # accepted sources (and user overrides) my %sources = ( inst_lib => File::Spec->catdir($dir,"blib","lib"), inst_archlib => File::Spec->catdir($dir,"blib","arch"), inst_bin => File::Spec->catdir($dir,'blib','bin'), inst_script => File::Spec->catdir($dir,'blib','script'), inst_man1dir => File::Spec->catdir($dir,'blib','man1'), inst_man3dir => File::Spec->catdir($dir,'blib','man3'), packlist_read => 'read', packlist_write => 'write', ); my $par_has_archlib = _directory_not_empty( $sources{inst_archlib} ); # default targets my $target = { read => $Config::Config{sitearchexp}."/auto/$name/.packlist", write => $Config::Config{installsitearch}."/auto/$name/.packlist", $sources{inst_lib} => ($par_has_archlib ? $Config::Config{installsitearch} : $Config::Config{installsitelib}), $sources{inst_archlib} => $Config::Config{installsitearch}, $sources{inst_bin} => $Config::Config{installbin} , $sources{inst_script} => $Config::Config{installscript}, $sources{inst_man1dir} => $Config::Config{installman1dir}, $sources{inst_man3dir} => $Config::Config{installman3dir}, }; # Included for future support for ${flavour}perl external lib installation # if ($Config::Config{flavour_perl}) { # my $ext = File::Spec->catdir($dir, 'blib', 'ext'); # # from => to # $sources{inst_external_lib} = File::Spec->catdir($ext, 'lib'); # $sources{inst_external_bin} = File::Spec->catdir($ext, 'bin'); # $sources{inst_external_include} = File::Spec->catdir($ext, 'include'); # $sources{inst_external_src} = File::Spec->catdir($ext, 'src'); # $target->{ $sources{inst_external_lib} } = $Config::Config{flavour_install_lib}; # $target->{ $sources{inst_external_bin} } = $Config::Config{flavour_install_bin}; # $target->{ $sources{inst_external_include} } = $Config::Config{flavour_install_include}; # $target->{ $sources{inst_external_src} } = $Config::Config{flavour_install_src}; # } # insert user overrides foreach my $key (keys %$user) { my $value = $user->{$key}; if (not defined $value and $key ne 'packlist_read' and $key ne 'packlist_write') { # undef means "remove" delete $target->{ $sources{$key} }; } elsif (exists $sources{$key}) { # overwrite stuff, don't let the user create new entries $target->{ $sources{$key} } = $value; } } # apply the automatic inst_lib => inst_archlib conversion again # if the user asks for it and there is an archlib in the .par if ($user->{auto_inst_lib_conversion} and $par_has_archlib) { $target->{inst_lib} = $target->{inst_archlib}; } return $target; } sub _directory_not_empty { require File::Find; my($dir) = @_; my $files = 0; File::Find::find(sub { return if $_ eq ".exists"; if (-f) { $File::Find::prune++; $files = 1; } }, $dir); return $files; } #line 585 sub sign_par { my %args = &_args; _verify_or_sign(%args, action => 'sign'); } #line 600 sub verify_par { my %args = &_args; $! = _verify_or_sign(%args, action => 'verify'); return ( $! == Module::Signature::SIGNATURE_OK() ); } #line 629 sub merge_par { my $base_par = shift; my @additional_pars = @_; require Cwd; require File::Copy; require File::Path; require File::Find; # parameter checking if (not defined $base_par) { croak "First argument to merge_par() must be the .par archive to modify."; } if (not -f $base_par or not -r _ or not -w _) { croak "'$base_par' is not a file or you do not have enough permissions to read and modify it."; } foreach (@additional_pars) { if (not -f $_ or not -r _) { croak "'$_' is not a file or you do not have enough permissions to read it."; } } # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $base_par, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); # move the META.yml to the (main) temp. dir. my $main_meta_file = File::Spec->catfile($base_dir, 'META.yml'); File::Copy::move( File::Spec->catfile($blibdir, 'META.yml'), $main_meta_file ); # delete (incorrect) MANIFEST unlink File::Spec->catfile($blibdir, 'MANIFEST'); # extract additional pars and merge foreach my $par (@additional_pars) { # restore original directory because the par path # might have been relative! chdir($old_cwd); (undef, my $add_dir) = _unzip_to_tmpdir( dist => $par ); # merge the meta (at least the provides info) into the main meta.yml my $meta_file = File::Spec->catfile($add_dir, 'META.yml'); if (-f $meta_file) { _merge_meta($main_meta_file, $meta_file); } my @files; my @dirs; # I hate File::Find # And I hate writing portable code, too. File::Find::find( {wanted =>sub { my $file = $File::Find::name; push @files, $file if -f $file; push @dirs, $file if -d _; }}, $add_dir ); my ($vol, $subdir, undef) = File::Spec->splitpath( $add_dir, 1); my @dir = File::Spec->splitdir( $subdir ); # merge directory structure foreach my $dir (@dirs) { my ($v, $d, undef) = File::Spec->splitpath( $dir, 1 ); my @d = File::Spec->splitdir( $d ); shift @d foreach @dir; # remove tmp dir from path my $target = File::Spec->catdir( $blibdir, @d ); mkdir($target); } # merge files foreach my $file (@files) { my ($v, $d, $f) = File::Spec->splitpath( $file ); my @d = File::Spec->splitdir( $d ); shift @d foreach @dir; # remove tmp dir from path my $target = File::Spec->catfile( File::Spec->catdir( $blibdir, @d ), $f ); File::Copy::copy($file, $target) or die "Could not copy '$file' to '$target': $!"; } chdir($old_cwd); File::Path::rmtree([$add_dir]); } # delete (copied) MANIFEST and META.yml unlink File::Spec->catfile($blibdir, 'MANIFEST'); unlink File::Spec->catfile($blibdir, 'META.yml'); chdir($base_dir); my $resulting_par_file = Cwd::abs_path(blib_to_par(quiet => 1)); chdir($old_cwd); File::Copy::move($resulting_par_file, $base_par); File::Path::rmtree([$base_dir]); } sub _merge_meta { my $meta_orig_file = shift; my $meta_extra_file = shift; return() if not defined $meta_orig_file or not -f $meta_orig_file; return 1 if not defined $meta_extra_file or not -f $meta_extra_file; my $yaml_functions = _get_yaml_functions(); die "Cannot merge META.yml files without a YAML reader/writer" if !exists $yaml_functions->{LoadFile} or !exists $yaml_functions->{DumpFile}; my $orig_meta = $yaml_functions->{LoadFile}->($meta_orig_file); my $extra_meta = $yaml_functions->{LoadFile}->($meta_extra_file); # I seem to remember there was this incompatibility between the different # YAML implementations with regards to "document" handling: my $orig_tree = (ref($orig_meta) eq 'ARRAY' ? $orig_meta->[0] : $orig_meta); my $extra_tree = (ref($extra_meta) eq 'ARRAY' ? $extra_meta->[0] : $extra_meta); _merge_provides($orig_tree, $extra_tree); _merge_requires($orig_tree, $extra_tree); $yaml_functions->{DumpFile}->($meta_orig_file, $orig_meta); return 1; } # merge the two-level provides sections of META.yml sub _merge_provides { my $orig_hash = shift; my $extra_hash = shift; return() if not exists $extra_hash->{provides}; $orig_hash->{provides} ||= {}; my $orig_provides = $orig_hash->{provides}; my $extra_provides = $extra_hash->{provides}; # two level clone is enough wrt META spec 1.4 # overwrite the original provides since we're also overwriting the files. foreach my $module (keys %$extra_provides) { my $extra_mod_hash = $extra_provides->{$module}; my %mod_hash; $mod_hash{$_} = $extra_mod_hash->{$_} for keys %$extra_mod_hash; $orig_provides->{$module} = \%mod_hash; } } # merge the single-level requires-like sections of META.yml sub _merge_requires { my $orig_hash = shift; my $extra_hash = shift; foreach my $type (qw(requires build_requires configure_requires recommends)) { next if not exists $extra_hash->{$type}; $orig_hash->{$type} ||= {}; # one level clone is enough wrt META spec 1.4 foreach my $module (keys %{ $extra_hash->{$type} }) { # FIXME there should be a version comparison here, BUT how are we going to do that without a guaranteed version.pm? $orig_hash->{$type}{$module} = $extra_hash->{$type}{$module}; # assign version and module name } } } #line 818 sub remove_man { my %args = &_args; my $par = $args{dist}; require Cwd; require File::Copy; require File::Path; require File::Find; # parameter checking if (not defined $par) { croak "First argument to remove_man() must be the .par archive to modify."; } if (not -f $par or not -r _ or not -w _) { croak "'$par' is not a file or you do not have enough permissions to read and modify it."; } # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $par, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); # move the META.yml to the (main) temp. dir. File::Copy::move( File::Spec->catfile($blibdir, 'META.yml'), File::Spec->catfile($base_dir, 'META.yml') ); # delete (incorrect) MANIFEST unlink File::Spec->catfile($blibdir, 'MANIFEST'); opendir DIRECTORY, 'blib' or die $!; my @dirs = grep { /^blib\/(?:man\d*|html)$/ } grep { -d $_ } map { File::Spec->catfile('blib', $_) } readdir DIRECTORY; close DIRECTORY; File::Path::rmtree(\@dirs); chdir($base_dir); my $resulting_par_file = Cwd::abs_path(blib_to_par()); chdir($old_cwd); File::Copy::move($resulting_par_file, $par); File::Path::rmtree([$base_dir]); } #line 884 sub get_meta { my %args = &_args; my $dist = $args{dist}; return undef if not defined $dist or not -r $dist; require Cwd; require File::Path; # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $dist, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); my $meta = File::Spec->catfile($blibdir, 'META.yml'); if (not -r $meta) { return undef; } open FH, '<', $meta or die "Could not open file '$meta' for reading: $!"; local $/ = undef; my $meta_text = ; close FH; chdir($old_cwd); File::Path::rmtree([$base_dir]); return $meta_text; } sub _unzip { my %args = &_args; my $dist = $args{dist}; my $path = $args{path} || File::Spec->curdir; return unless -f $dist; # Try fast unzipping first if (eval { require Archive::Unzip::Burst; 1 }) { my $return = !Archive::Unzip::Burst::unzip($dist, $path); return if $return; # true return value == error (a la system call) } # Then slow unzipping if (eval { require Archive::Zip; 1 }) { my $zip = Archive::Zip->new; local %SIG; $SIG{__WARN__} = sub { print STDERR $_[0] unless $_[0] =~ /\bstat\b/ }; return unless $zip->read($dist) == Archive::Zip::AZ_OK() and $zip->extractTree('', "$path/") == Archive::Zip::AZ_OK(); } # Then fall back to the system else { undef $!; if (_system_wrapper(unzip => $dist, '-d', $path)) { die "Failed to unzip '$dist' to path '$path': Could neither load " . "Archive::Zip nor (successfully) run the system 'unzip' (unzip said: $!)"; } } return 1; } sub _zip { my %args = &_args; my $dist = $args{dist}; if (eval { require Archive::Zip; 1 }) { my $zip = Archive::Zip->new; $zip->addTree( File::Spec->curdir, '' ); $zip->writeToFileNamed( $dist ) == Archive::Zip::AZ_OK() or die $!; } else { undef $!; if (_system_wrapper(qw(zip -r), $dist, File::Spec->curdir)) { die "Failed to zip '" .File::Spec->curdir(). "' to '$dist': Could neither load " . "Archive::Zip nor (successfully) run the system 'zip' (zip said: $!)"; } } return 1; } # This sub munges the arguments to most of the PAR::Dist functions # into a hash. On the way, it downloads PAR archives as necessary, etc. sub _args { # default to the first .par in the CWD if (not @_) { @_ = (glob('*.par'))[0]; } # single argument => it's a distribution file name or URL @_ = (dist => @_) if @_ == 1; my %args = @_; $args{name} ||= $args{dist}; # If we are installing from an URL, we want to munge the # distribution name so that it is in form "Module-Name" if (defined $args{name}) { $args{name} =~ s/^\w+:\/\///; my @elems = parse_dist_name($args{name}); # @elems is name, version, arch, perlversion if (defined $elems[0]) { $args{name} = $elems[0]; } else { $args{name} =~ s/^.*\/([^\/]+)$/$1/; $args{name} =~ s/^([0-9A-Za-z_-]+)-\d+\..+$/$1/; } } # append suffix if there is none if ($args{dist} and not $args{dist} =~ /\.[a-zA-Z_][^.]*$/) { require Config; my $suffix = $args{suffix}; $suffix ||= "$Config::Config{archname}-$Config::Config{version}.par"; $args{dist} .= "-$suffix"; } # download if it's an URL if ($args{dist} and $args{dist} =~ m!^\w+://!) { $args{dist} = _fetch(dist => $args{dist}) } return %args; } # Download PAR archive, but only if necessary (mirror!) my %escapes; sub _fetch { my %args = @_; if ($args{dist} =~ s/^file:\/\///) { return $args{dist} if -e $args{dist}; return; } require LWP::Simple; $ENV{PAR_TEMP} ||= File::Spec->catdir(File::Spec->tmpdir, 'par'); mkdir $ENV{PAR_TEMP}, 0777; %escapes = map { chr($_) => sprintf("%%%02X", $_) } 0..255 unless %escapes; $args{dist} =~ s{^cpan://((([a-zA-Z])[a-zA-Z])[-_a-zA-Z]+)/} {http://www.cpan.org/modules/by-authors/id/\U$3/$2/$1\E/}; my $file = $args{dist}; $file =~ s/([^\w\.])/$escapes{$1}/g; $file = File::Spec->catfile( $ENV{PAR_TEMP}, $file); my $rc = LWP::Simple::mirror( $args{dist}, $file ); if (!LWP::Simple::is_success($rc) and $rc != 304) { die "Error $rc: ", LWP::Simple::status_message($rc), " ($args{dist})\n"; } return $file if -e $file; return; } sub _verify_or_sign { my %args = &_args; require File::Path; require Module::Signature; die "Module::Signature version 0.25 required" unless Module::Signature->VERSION >= 0.25; require Cwd; my $cwd = Cwd::cwd(); my $action = $args{action}; my ($dist, $tmpdir) = _unzip_to_tmpdir($args{dist}); $action ||= (-e 'SIGNATURE' ? 'verify' : 'sign'); if ($action eq 'sign') { open FH, '>SIGNATURE' unless -e 'SIGNATURE'; open FH, 'MANIFEST' or die $!; local $/; my $out = ; if ($out !~ /^SIGNATURE(?:\s|$)/m) { $out =~ s/^(?!\s)/SIGNATURE\n/m; open FH, '>MANIFEST' or die $!; print FH $out; } close FH; $args{overwrite} = 1 unless exists $args{overwrite}; $args{skip} = 0 unless exists $args{skip}; } my $rv = Module::Signature->can($action)->(%args); _zip(dist => $dist) if $action eq 'sign'; File::Path::rmtree([$tmpdir]); chdir($cwd); return $rv; } sub _unzip_to_tmpdir { my %args = &_args; require File::Temp; my $dist = File::Spec->rel2abs($args{dist}); my $tmpdirname = File::Spec->catdir(File::Spec->tmpdir, "parXXXXX"); my $tmpdir = File::Temp::mkdtemp($tmpdirname) or die "Could not create temporary directory from template '$tmpdirname': $!"; my $path = $tmpdir; $path = File::Spec->catdir($tmpdir, $args{subdir}) if defined $args{subdir}; _unzip(dist => $dist, path => $path); chdir $tmpdir; return ($dist, $tmpdir); } #line 1132 sub parse_dist_name { my $file = shift; return(undef, undef, undef, undef) if not defined $file; (undef, undef, $file) = File::Spec->splitpath($file); my $version = qr/v?(?:\d+(?:_\d+)?|\d*(?:\.\d+(?:_\d+)?)+)/; $file =~ s/\.(?:par|tar\.gz|tar)$//i; my @elem = split /-/, $file; my (@dn, $dv, @arch, $pv); while (@elem) { my $e = shift @elem; if ( $e =~ /^$version$/o and not(# if not next token also a version # (assumes an arch string doesnt start with a version...) @elem and $elem[0] =~ /^$version$/o ) ) { $dv = $e; last; } push @dn, $e; } my $dn; $dn = join('-', @dn) if @dn; if (not @elem) { return( $dn, $dv, undef, undef); } while (@elem) { my $e = shift @elem; if ($e =~ /^$version|any_version$/) { $pv = $e; last; } push @arch, $e; } my $arch; $arch = join('-', @arch) if @arch; return($dn, $dv, $arch, $pv); } #line 1209 sub generate_blib_stub { my %args = &_args; my $dist = $args{dist}; require Config; my $name = $args{name}; my $version = $args{version}; my $suffix = $args{suffix}; my ($parse_name, $parse_version, $archname, $perlversion) = parse_dist_name($dist); $name ||= $parse_name; $version ||= $parse_version; $suffix = "$archname-$perlversion" if (not defined $suffix or $suffix eq '') and $archname and $perlversion; $suffix ||= "$Config::Config{archname}-$Config::Config{version}"; if ( grep { not defined $_ } ($name, $version, $suffix) ) { warn "Could not determine distribution meta information from distribution name '$dist'"; return(); } $suffix =~ s/\.par$//; if (not -f 'META.yml') { open META, '>', 'META.yml' or die "Could not open META.yml file for writing: $!"; print META << "YAML" if fileno(META); name: $name version: $version build_requires: {} conflicts: {} dist_name: $name-$version-$suffix.par distribution_type: par dynamic_config: 0 generated_by: 'PAR::Dist version $PAR::Dist::VERSION' license: unknown YAML close META; } mkdir('blib'); mkdir(File::Spec->catdir('blib', 'lib')); mkdir(File::Spec->catdir('blib', 'script')); return 1; } #line 1277 sub contains_binaries { require File::Find; my %args = &_args; my $dist = $args{dist}; return undef if not defined $dist or not -r $dist; require Cwd; require File::Path; # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $dist, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); my $archdir = File::Spec->catdir($blibdir, 'arch'); my $found = 0; File::Find::find( sub { $found++ if -f $_ and not /^\.exists$/; }, $archdir ); chdir($old_cwd); File::Path::rmtree([$base_dir]); return $found ? 1 : 0; } sub _system_wrapper { if ($DEBUG) { Carp::cluck("Running system call '@_' from:"); } return system(@_); } # stolen from Module::Install::Can # very much internal and subject to change or removal sub _MI_can_run { require ExtUtils::MakeMaker; my ($cmd) = @_; my $_cmd = $cmd; return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { my $abs = File::Spec->catfile($dir, $cmd); return $abs if (-x $abs or $abs = MM->maybe_command($abs)); } return; } # Tries to load any YAML reader writer I know of # returns nothing on failure or hash reference containing # a subset of Load, Dump, LoadFile, DumpFile # entries with sub references on success. sub _get_yaml_functions { # reasoning for the ranking here: # - syck is fast and reasonably complete # - YAML.pm is slow and aging # - Tiny is only a very small subset # - XS is very new and I'm not sure it's ready for prime-time yet # - Parse... is only a reader and only deals with the same subset as ::Tiny my @modules = qw(YAML::Syck YAML YAML::Tiny YAML::XS Parse::CPAN::Meta); my %yaml_functions; foreach my $module (@modules) { eval "require $module;"; if (!$@) { warn "PAR::Dist testers/debug info: Using '$module' as YAML implementation" if $DEBUG; foreach my $sub (qw(Load Dump LoadFile DumpFile)) { no strict 'refs'; my $subref = *{"${module}::$sub"}{CODE}; if (defined $subref and ref($subref) eq 'CODE') { $yaml_functions{$sub} = $subref; } } $yaml_functions{yaml_provider} = $module; last; } } # end foreach module candidates if (not keys %yaml_functions) { warn "Cannot find a working YAML reader/writer implementation. Tried to load all of '@modules'"; } return(\%yaml_functions); } sub _check_tools { my $tools = _get_yaml_functions(); if ($DEBUG) { foreach (qw/Load Dump LoadFile DumpFile/) { warn "No YAML support for $_ found.\n" if not defined $tools->{$_}; } } $tools->{zip} = undef; # A::Zip 1.28 was a broken release... if (eval {require Archive::Zip; 1;} and $Archive::Zip::VERSION ne '1.28') { warn "Using Archive::Zip as ZIP tool.\n" if $DEBUG; $tools->{zip} = 'Archive::Zip'; } elsif (_MI_can_run("zip") and _MI_can_run("unzip")) { warn "Using zip/unzip as ZIP tool.\n" if $DEBUG; $tools->{zip} = 'zip'; } else { warn "Found neither Archive::Zip (version != 1.28) nor ZIP/UNZIP as valid ZIP tools.\n" if $DEBUG; $tools->{zip} = undef; } return $tools; } 1; #line 1426 FILEbf5df353/PAR/Filter.pmx#line 1 "/usr/local/share/perl/5.10.1/PAR/Filter.pm" package PAR::Filter; use 5.006; use strict; use warnings; our $VERSION = '0.03'; #line 64 sub new { my $class = shift; require "PAR/Filter/$_.pm" foreach @_; bless(\@_, $class); } sub apply { my ($self, $ref, $name) = @_; my $filename = $name || '-e'; if (!ref $ref) { $name ||= $filename = $ref; local $/; open my $fh, $ref or die $!; binmode($fh); my $content = <$fh>; $ref = \$content; return $ref unless length($content); } "PAR::Filter::$_"->new->apply( $ref, $filename, $name ) foreach @$self; return $ref; } 1; #line 106 FILE798363e2/PAR/Filter/PodStrip.pm#line 1 "/usr/local/share/perl/5.10.1/PAR/Filter/PodStrip.pm" package PAR::Filter::PodStrip; use 5.006; use strict; use warnings; use base 'PAR::Filter'; #line 22 sub apply { my ($class, $ref, $filename, $name) = @_; no warnings 'uninitialized'; my $data = ''; $data = $1 if $$ref =~ s/((?:^__DATA__\r?\n).*)//ms; my $line = 1; if ($$ref =~ /^=(?:head\d|pod|begin|item|over|for|back|end|cut)\b/) { $$ref = "\n$$ref"; $line--; } $$ref =~ s{( (.*?\n) (?:=(?:head\d|pod|begin|item|over|for|back|end)\b .*?\n) (?:=cut[\t ]*[\r\n]*?|\Z) (\r?\n)? )}{ my ($pre, $post) = ($2, $3); "$pre#line " . ( $line += ( () = ( $1 =~ /\n/g ) ) ) . $post; }gsex; $$ref =~ s{^=encoding\s+\S+\s*$}{\n}mg; $$ref = '#line 1 "' . ($filename) . "\"\n" . $$ref if length $filename; $$ref =~ s/^#line 1 (.*\n)(#!.*\n)/$2#line 2 $1/g; $$ref .= $data; } 1; #line 85 FILE8f7f1a63/PAR/Heavy.pm#line 1 "/usr/local/share/perl/5.10.1/PAR/Heavy.pm" package PAR::Heavy; $PAR::Heavy::VERSION = '0.12'; #line 17 ######################################################################## # Dynamic inclusion of XS modules my ($bootstrap, $dl_findfile); # Caches for code references my ($dlext); # Cache for $Config{dlext} my ($cache_key); # The current file to find my $is_insensitive_fs = ( -s $0 and (-s lc($0) || -1) == (-s uc($0) || -1) and (-s lc($0) || -1) == -s $0 ); # Adds pre-hooks to Dynaloader's key methods sub _init_dynaloader { return if $bootstrap; return unless eval { require DynaLoader; DynaLoader::dl_findfile(); 1 }; $bootstrap = \&DynaLoader::bootstrap; $dl_findfile = \&DynaLoader::dl_findfile; local $^W; *{'DynaLoader::dl_expandspec'} = sub { return }; *{'DynaLoader::bootstrap'} = \&_bootstrap; *{'DynaLoader::dl_findfile'} = \&_dl_findfile; } # Return the cached location of .dll inside PAR first, if possible. sub _dl_findfile { return $FullCache{$cache_key} if exists $FullCache{$cache_key}; if ($is_insensitive_fs) { # We have a case-insensitive filesystem... my ($key) = grep { lc($_) eq lc($cache_key) } keys %FullCache; return $FullCache{$key} if defined $key; } return $dl_findfile->(@_); } # Find and extract .dll from PAR files for a given dynamic module. sub _bootstrap { my (@args) = @_; my ($module) = $args[0] or return; my @modparts = split(/::/, $module); my $modfname = $modparts[-1]; $modfname = &DynaLoader::mod2fname(\@modparts) if defined &DynaLoader::mod2fname; if (($^O eq 'NetWare') && (length($modfname) > 8)) { $modfname = substr($modfname, 0, 8); } # XXX: Multi-platform .dll support in PARs needs better than $Config. # FIXME: Config is always loaded by PAR.pm! $dlext ||= do { require Config; (%Config::Config) ? $Config::Config{dlext} : ''; }; my $modpname = join((($^O eq 'MacOS') ? ':' : '/'), @modparts); my $file = $cache_key = "auto/$modpname/$modfname.$dlext"; if ($FullCache{$file}) { # TODO: understand local $DynaLoader::do_expand = 1; return $bootstrap->(@args); } my $member; # First, try to find things in the peferentially loaded PARs: $member = PAR::_find_par_internals([@PAR::PAR_INC], undef, $file, 1) if defined &PAR::_find_par_internals; # If that failed to find the dll, let DynaLoader (try or) throw an error unless ($member) { my $filename = eval { $bootstrap->(@args) }; return $filename if not $@ and defined $filename; # Now try the fallback pars $member = PAR::_find_par_internals([@PAR::PAR_INC_LAST], undef, $file, 1) if defined &PAR::_find_par_internals; # If that fails, let dynaloader have another go JUST to throw an error # While this may seem wasteful, nothing really matters once we fail to # load shared libraries! unless ($member) { return $bootstrap->(@args); } } $FullCache{$file} = _dl_extract($member, $file); # Now extract all associated shared objs in the same auto/ dir # XXX: shouldn't this also set $FullCache{...} for those files? my $first = $member->fileName; my $path_pattern = $first; $path_pattern =~ s{[^/]*$}{}; if ($PAR::LastAccessedPAR) { foreach my $member ( $PAR::LastAccessedPAR->members ) { next if $member->isDirectory; my $name = $member->fileName; next if $name eq $first; next unless $name =~ m{^/?\Q$path_pattern\E\/[^/]*\.\Q$dlext\E[^/]*$}; $name =~ s{.*/}{}; _dl_extract($member, $file, $name); } } local $DynaLoader::do_expand = 1; return $bootstrap->(@args); } sub _dl_extract { my ($member, $file, $name) = @_; require File::Spec; require File::Temp; my ($fh, $filename); # fix borked tempdir from earlier versions if ($ENV{PAR_TEMP} and -e $ENV{PAR_TEMP} and !-d $ENV{PAR_TEMP}) { unlink($ENV{PAR_TEMP}); mkdir($ENV{PAR_TEMP}, 0755); } if ($ENV{PAR_CLEAN} and !$name) { ($fh, $filename) = File::Temp::tempfile( DIR => ($ENV{PAR_TEMP} || File::Spec->tmpdir), SUFFIX => ".$dlext", UNLINK => ($^O ne 'MSWin32' and $^O !~ /hpux/), ); ($filename) = $filename =~ /^([\x20-\xff]+)$/; } else { $filename = File::Spec->catfile( ($ENV{PAR_TEMP} || File::Spec->tmpdir), ($name || ($member->crc32String . ".$dlext")) ); ($filename) = $filename =~ /^([\x20-\xff]+)$/; open $fh, '>', $filename or die $! unless -r $filename and -e _ and -s _ == $member->uncompressedSize; } if ($fh) { binmode($fh); $member->extractToFileHandle($fh); close $fh; chmod 0755, $filename; } return $filename; } 1; #line 205 FILEbd780b93/PAR/SetupProgname.pm#line 1 "/usr/local/share/perl/5.10.1/PAR/SetupProgname.pm" package PAR::SetupProgname; $PAR::SetupProgname::VERSION = '1.002'; use 5.006; use strict; use warnings; use Config (); #line 26 # for PAR internal use only! our $Progname = $ENV{PAR_PROGNAME} || $0; # same code lives in PAR::Packer's par.pl! sub set_progname { require File::Spec; if (defined $ENV{PAR_PROGNAME} and $ENV{PAR_PROGNAME} =~ /(.+)/) { $Progname = $1; } $Progname = $0 if not defined $Progname; if (( () = File::Spec->splitdir($Progname) ) > 1 or !$ENV{PAR_PROGNAME}) { if (open my $fh, $Progname) { return if -s $fh; } if (-s "$Progname$Config::Config{_exe}") { $Progname .= $Config::Config{_exe}; return; } } foreach my $dir (split /\Q$Config::Config{path_sep}\E/, $ENV{PATH}) { next if exists $ENV{PAR_TEMP} and $dir eq $ENV{PAR_TEMP}; my $name = File::Spec->catfile($dir, "$Progname$Config::Config{_exe}"); if (-s $name) { $Progname = $name; last } $name = File::Spec->catfile($dir, "$Progname"); if (-s $name) { $Progname = $name; last } } } 1; __END__ #line 94 FILE7326da25/PAR/SetupTemp.pm #line 1 "/usr/local/share/perl/5.10.1/PAR/SetupTemp.pm" package PAR::SetupTemp; $PAR::SetupTemp::VERSION = '1.002'; use 5.006; use strict; use warnings; use PAR::SetupProgname; #line 29 # for PAR internal use only! our $PARTemp; # The C version of this code appears in myldr/mktmpdir.c # This code also lives in PAR::Packer's par.pl as _set_par_temp! sub set_par_temp_env { PAR::SetupProgname::set_progname() unless defined $PAR::SetupProgname::Progname; if (defined $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/) { $PARTemp = $1; return; } my $stmpdir = _get_par_user_tempdir(); require File::Spec; if (defined $stmpdir) { # it'd be quite bad if this was not the case if (!$ENV{PAR_CLEAN} and my $mtime = (stat($PAR::SetupProgname::Progname))[9]) { my $ctx = _get_digester(); # Workaround for bug in Digest::SHA 5.38 and 5.39 my $sha_version = eval { $Digest::SHA::VERSION } || 0; if ($sha_version eq '5.38' or $sha_version eq '5.39') { $ctx->addfile($PAR::SetupProgname::Progname, "b") if ($ctx); } else { if ($ctx and open(my $fh, "<$PAR::SetupProgname::Progname")) { binmode($fh); $ctx->addfile($fh); close($fh); } } $stmpdir = File::Spec->catdir( $stmpdir, "cache-" . ( $ctx ? $ctx->hexdigest : $mtime ) ); } else { $ENV{PAR_CLEAN} = 1; $stmpdir = File::Spec->catdir($stmpdir, "temp-$$"); } $ENV{PAR_TEMP} = $stmpdir; mkdir $stmpdir, 0755; } # end if found a temp dir $PARTemp = $1 if defined $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/; } # Find any digester # Used in PAR::Repository::Client! sub _get_digester { my $ctx = eval { require Digest::SHA; Digest::SHA->new(1) } || eval { require Digest::SHA1; Digest::SHA1->new } || eval { require Digest::MD5; Digest::MD5->new }; return $ctx; } # find the per-user temporary directory (eg /tmp/par-$USER) # Used in PAR::Repository::Client! sub _get_par_user_tempdir { my $username = _find_username(); my $temp_path; foreach my $path ( (map $ENV{$_}, qw( PAR_TMPDIR TMPDIR TEMPDIR TEMP TMP )), qw( C:\\TEMP /tmp . ) ) { next unless defined $path and -d $path and -w $path; $temp_path = File::Spec->catdir($path, "par-$username"); ($temp_path) = $temp_path =~ /^(.*)$/s; mkdir $temp_path, 0755; last; } return $temp_path; } # tries hard to find out the name of the current user sub _find_username { my $username; my $pwuid; # does not work everywhere: eval {($pwuid) = getpwuid($>) if defined $>;}; if ( defined(&Win32::LoginName) ) { $username = &Win32::LoginName; } elsif (defined $pwuid) { $username = $pwuid; } else { $username = $ENV{USERNAME} || $ENV{USER} || 'SYSTEM'; } $username =~ s/\W/_/g; return $username; } 1; __END__ #line 164 FILEe5038970/prefork.pm #line 1 "/usr/local/share/perl/5.10.1/prefork.pm" package prefork; #line 176 use 5.005; use strict; use Carp (); use List::Util 0.18 (); use Scalar::Util 0.18 (); use vars qw{$VERSION $FORKING %MODULES @NOTIFY}; BEGIN { $VERSION = '1.04'; # The main state variable for this package. # Are we in preforking mode. $FORKING = ''; # The queue of modules to load %MODULES = (); # The queue of notification callbacks @NOTIFY = ( sub { # Do a hash copy of Config to get everything # inside of it preloaded. require Config; eval { # Sometimes there is no Config_heavy.pl require 'Config_heavy.pl'; }; my $copy = { %Config::Config }; return 1; }, ); # Look for situations that need us to start in forking mode $FORKING = 1 if $ENV{MOD_PERL}; } sub import { return 1 unless $_[1]; ($_[1] eq ':enable') ? enable() : prefork($_[1]); } #line 232 sub prefork ($) { # Just hand straight to require if enabled my $module = defined $_[0] ? "$_[0]" : '' or Carp::croak('You did not pass a module name to prefork'); $module =~ /^[^\W\d]\w*(?:(?:\'|::)[^\W\d]\w*)*$/ or Carp::croak("'$module' is not a module name"); my $file = join( '/', split /(?:\'|::)/, $module ) . '.pm'; # Is it already loaded or queued return 1 if $INC{$file}; return 1 if $MODULES{$module}; # Load now if enabled, or add to the module list return require $file if $FORKING; $MODULES{$module} = $file; 1; } #line 266 sub enable () { # Turn on the PREFORK flag, so any additional # 'use prefork ...' calls made during loading # will load immediately. return 1 if $FORKING; $FORKING = 1; # Load all of the modules not yet loaded foreach my $module ( sort keys %MODULES ) { my $file = $MODULES{$module}; # Has it been loaded since we were told about it next if $INC{$file}; # Load the module. require $file; } # Clear the modules list %MODULES = (); # Execute the third-party callbacks while ( my $callback = shift @NOTIFY ) { $callback->(); } 1; } #line 323 sub notify ($) { # Get the CODE ref callback param my $function = shift; my $reftype = Scalar::Util::reftype($function); unless ( $reftype and $reftype eq 'CODE' ) { Carp::croak("prefork::notify was not passed a CODE reference"); } # Call it immediately is already in forking mode if ( $FORKING ) { $function->(); return 1; } # Is it already defined? if ( List::Util::first { Scalar::Util::refaddr($function) == Scalar::Util::refaddr($_) } @NOTIFY ) { Carp::croak("Callback function already registered"); } # Add to the queue push @NOTIFY, $function; 1; } ##################################################################### # Built-in Notifications # Compile CGI functions automatically prefork::notify( sub { CGI->compile() if $INC{'CGI.pm'}; } ); 1; #line 395 FILE52a3c86b/AutoLoader.pmI#line 1 "/usr/share/perl/5.10/AutoLoader.pm" package AutoLoader; use strict; use 5.006_001; our($VERSION, $AUTOLOAD); my $is_dosish; my $is_epoc; my $is_vms; my $is_macos; BEGIN { $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare'; $is_epoc = $^O eq 'epoc'; $is_vms = $^O eq 'VMS'; $is_macos = $^O eq 'MacOS'; $VERSION = '5.68'; } AUTOLOAD { my $sub = $AUTOLOAD; my $filename = AutoLoader::find_filename( $sub ); my $save = $@; local $!; # Do not munge the value. eval { local $SIG{__DIE__}; require $filename }; if ($@) { if (substr($sub,-9) eq '::DESTROY') { no strict 'refs'; *$sub = sub {}; $@ = undef; } elsif ($@ =~ /^Can't locate/) { # The load might just have failed because the filename was too # long for some old SVR3 systems which treat long names as errors. # If we can successfully truncate a long name then it's worth a go. # There is a slight risk that we could pick up the wrong file here # but autosplit should have warned about that when splitting. if ($filename =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){ eval { local $SIG{__DIE__}; require $filename }; } } if ($@){ $@ =~ s/ at .*\n//; my $error = $@; require Carp; Carp::croak($error); } } $@ = $save; goto &$sub; } sub find_filename { my $sub = shift; my $filename; # Braces used to preserve $1 et al. { # Try to find the autoloaded file from the package-qualified # name of the sub. e.g., if the sub needed is # Getopt::Long::GetOptions(), then $INC{Getopt/Long.pm} is # something like '/usr/lib/perl5/Getopt/Long.pm', and the # autoload file is '/usr/lib/perl5/auto/Getopt/Long/GetOptions.al'. # # However, if @INC is a relative path, this might not work. If, # for example, @INC = ('lib'), then $INC{Getopt/Long.pm} is # 'lib/Getopt/Long.pm', and we want to require # 'auto/Getopt/Long/GetOptions.al' (without the leading 'lib'). # In this case, we simple prepend the 'auto/' and let the # C take care of the searching for us. my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/); $pkg =~ s#::#/#g; if (defined($filename = $INC{"$pkg.pm"})) { if ($is_macos) { $pkg =~ tr#/#:#; $filename = undef unless $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s; } else { $filename = undef unless $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s; } # if the file exists, then make sure that it is a # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al', # or './lib/auto/foo/bar.al'. This avoids C searching # (and failing) to find the 'lib/auto/foo/bar.al' because it # looked for 'lib/lib/auto/foo/bar.al', given @INC = ('lib'). if (defined $filename and -r $filename) { unless ($filename =~ m|^/|s) { if ($is_dosish) { unless ($filename =~ m{^([a-z]:)?[\\/]}is) { if ($^O ne 'NetWare') { $filename = "./$filename"; } else { $filename = "$filename"; } } } elsif ($is_epoc) { unless ($filename =~ m{^([a-z?]:)?[\\/]}is) { $filename = "./$filename"; } } elsif ($is_vms) { # XXX todo by VMSmiths $filename = "./$filename"; } elsif (!$is_macos) { $filename = "./$filename"; } } } else { $filename = undef; } } unless (defined $filename) { # let C do the searching $filename = "auto/$sub.al"; $filename =~ s#::#/#g; } } return $filename; } sub import { my $pkg = shift; my $callpkg = caller; # # Export symbols, but not by accident of inheritance. # if ($pkg eq 'AutoLoader') { if ( @_ and $_[0] =~ /^&?AUTOLOAD$/ ) { no strict 'refs'; *{ $callpkg . '::AUTOLOAD' } = \&AUTOLOAD; } } # # Try to find the autosplit index file. Eg., if the call package # is POSIX, then $INC{POSIX.pm} is something like # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that. # # However, if @INC is a relative path, this might not work. If, # for example, @INC = ('lib'), then # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require # 'auto/POSIX/autosplit.ix' (without the leading 'lib'). # (my $calldir = $callpkg) =~ s#::#/#g; my $path = $INC{$calldir . '.pm'}; if (defined($path)) { # Try absolute path name, but only eval it if the # transformation from module path to autosplit.ix path # succeeded! my $replaced_okay; if ($is_macos) { (my $malldir = $calldir) =~ tr#/#:#; $replaced_okay = ($path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s); } else { $replaced_okay = ($path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#); } eval { require $path; } if $replaced_okay; # If that failed, try relative path with normal @INC searching. if (!$replaced_okay or $@) { $path ="auto/$calldir/autosplit.ix"; eval { require $path; }; } if ($@) { my $error = $@; require Carp; Carp::carp($error); } } } sub unimport { my $callpkg = caller; no strict 'refs'; for my $exported (qw( AUTOLOAD )) { my $symname = $callpkg . '::' . $exported; undef *{ $symname } if \&{ $symname } == \&{ $exported }; *{ $symname } = \&{ $symname }; } } 1; __END__ FILE81582293/Carp.pm#line 1 "/usr/share/perl/5.10/Carp.pm" package Carp; our $VERSION = '1.11'; # this file is an utra-lightweight stub. The first time a function is # called, Carp::Heavy is loaded, and the real short/longmessmess_jmp # subs are installed our $MaxEvalLen = 0; our $Verbose = 0; our $CarpLevel = 0; our $MaxArgLen = 64; # How much of each argument to print. 0 = all. our $MaxArgNums = 8; # How many arguments to print. 0 = all. require Exporter; our @ISA = ('Exporter'); our @EXPORT = qw(confess croak carp); our @EXPORT_OK = qw(cluck verbose longmess shortmess); our @EXPORT_FAIL = qw(verbose); # hook to enable verbose mode # if the caller specifies verbose usage ("perl -MCarp=verbose script.pl") # then the following method will be called by the Exporter which knows # to do this thanks to @EXPORT_FAIL, above. $_[1] will contain the word # 'verbose'. sub export_fail { shift; $Verbose = shift if $_[0] eq 'verbose'; @_ } # fixed hooks for stashes to point to sub longmess { goto &longmess_jmp } sub shortmess { goto &shortmess_jmp } # these two are replaced when Carp::Heavy is loaded sub longmess_jmp { local($@, $!); eval { require Carp::Heavy }; return $@ if $@; goto &longmess_real; } sub shortmess_jmp { local($@, $!); eval { require Carp::Heavy }; return $@ if $@; goto &shortmess_real; } sub croak { die shortmess @_ } sub confess { die longmess @_ } sub carp { warn shortmess @_ } sub cluck { warn longmess @_ } 1; __END__ FILEd41e7cfb/Carp/Heavy.pm +#line 1 "/usr/share/perl/5.10/Carp/Heavy.pm" # Carp::Heavy uses some variables in common with Carp. package Carp; # On one line so MakeMaker will see it. use Carp; our $VERSION = $Carp::VERSION; # use strict; # not yet # 'use Carp' just installs some very lightweight stubs; the first time # these are called, they require Carp::Heavy which installs the real # routines. # The members of %Internal are packages that are internal to perl. # Carp will not report errors from within these packages if it # can. The members of %CarpInternal are internal to Perl's warning # system. Carp will not report errors from within these packages # either, and will not report calls *to* these packages for carp and # croak. They replace $CarpLevel, which is deprecated. The # $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval # text and function arguments should be formatted when printed. # disable these by default, so they can live w/o require Carp $CarpInternal{Carp}++; $CarpInternal{warnings}++; $Internal{Exporter}++; $Internal{'Exporter::Heavy'}++; our ($CarpLevel, $MaxArgNums, $MaxEvalLen, $MaxArgLen, $Verbose); # XXX longmess_real and shortmess_real should really be merged into # XXX {long|sort}mess_heavy at some point sub longmess_real { # Icky backwards compatibility wrapper. :-( # # The story is that the original implementation hard-coded the # number of call levels to go back, so calls to longmess were off # by one. Other code began calling longmess and expecting this # behaviour, so the replacement has to emulate that behaviour. my $call_pack = caller(); if ($Internal{$call_pack} or $CarpInternal{$call_pack}) { return longmess_heavy(@_); } else { local $CarpLevel = $CarpLevel + 1; return longmess_heavy(@_); } }; sub shortmess_real { # Icky backwards compatibility wrapper. :-( local @CARP_NOT = caller(); shortmess_heavy(@_); }; # replace the two hooks added by Carp # aliasing the whole glob rather than just the CV slot avoids 'redefined' # warnings, even in the presence of perl -W (as used by lib/warnings.t !) # However it has the potential to create infinite loops, if somehow Carp # is forcibly reloaded, but $INC{"Carp/Heavy.pm"} remains true. # Hence the extra hack of deleting the previous typeglob first. delete $Carp::{shortmess_jmp}; delete $Carp::{longmess_jmp}; *longmess_jmp = *longmess_real; *shortmess_jmp = *shortmess_real; sub caller_info { my $i = shift(@_) + 1; package DB; my %call_info; @call_info{ qw(pack file line sub has_args wantarray evaltext is_require) } = caller($i); unless (defined $call_info{pack}) { return (); } my $sub_name = Carp::get_subname(\%call_info); if ($call_info{has_args}) { my @args = map {Carp::format_arg($_)} @DB::args; if ($MaxArgNums and @args > $MaxArgNums) { # More than we want to show? $#args = $MaxArgNums; push @args, '...'; } # Push the args onto the subroutine $sub_name .= '(' . join (', ', @args) . ')'; } $call_info{sub_name} = $sub_name; return wantarray() ? %call_info : \%call_info; } # Transform an argument to a function into a string. sub format_arg { my $arg = shift; if (ref($arg)) { $arg = defined($overload::VERSION) ? overload::StrVal($arg) : "$arg"; } if (defined($arg)) { $arg =~ s/'/\\'/g; $arg = str_len_trim($arg, $MaxArgLen); # Quote it? $arg = "'$arg'" unless $arg =~ /^-?[\d.]+\z/; } else { $arg = 'undef'; } # The following handling of "control chars" is direct from # the original code - it is broken on Unicode though. # Suggestions? utf8::is_utf8($arg) or $arg =~ s/([[:cntrl:]]|[[:^ascii:]])/sprintf("\\x{%x}",ord($1))/eg; return $arg; } # Takes an inheritance cache and a package and returns # an anon hash of known inheritances and anon array of # inheritances which consequences have not been figured # for. sub get_status { my $cache = shift; my $pkg = shift; $cache->{$pkg} ||= [{$pkg => $pkg}, [trusts_directly($pkg)]]; return @{$cache->{$pkg}}; } # Takes the info from caller() and figures out the name of # the sub/require/eval sub get_subname { my $info = shift; if (defined($info->{evaltext})) { my $eval = $info->{evaltext}; if ($info->{is_require}) { return "require $eval"; } else { $eval =~ s/([\\\'])/\\$1/g; return "eval '" . str_len_trim($eval, $MaxEvalLen) . "'"; } } return ($info->{sub} eq '(eval)') ? 'eval {...}' : $info->{sub}; } # Figures out what call (from the point of view of the caller) # the long error backtrace should start at. sub long_error_loc { my $i; my $lvl = $CarpLevel; { my $pkg = caller(++$i); unless(defined($pkg)) { # This *shouldn't* happen. if (%Internal) { local %Internal; $i = long_error_loc(); last; } else { # OK, now I am irritated. return 2; } } redo if $CarpInternal{$pkg}; redo unless 0 > --$lvl; redo if $Internal{$pkg}; } return $i - 1; } sub longmess_heavy { return @_ if ref($_[0]); # don't break references as exceptions my $i = long_error_loc(); return ret_backtrace($i, @_); } # Returns a full stack backtrace starting from where it is # told. sub ret_backtrace { my ($i, @error) = @_; my $mess; my $err = join '', @error; $i++; my $tid_msg = ''; if (defined &threads::tid) { my $tid = threads->tid; $tid_msg = " thread $tid" if $tid; } my %i = caller_info($i); $mess = "$err at $i{file} line $i{line}$tid_msg\n"; while (my %i = caller_info(++$i)) { $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n"; } return $mess; } sub ret_summary { my ($i, @error) = @_; my $err = join '', @error; $i++; my $tid_msg = ''; if (defined &threads::tid) { my $tid = threads->tid; $tid_msg = " thread $tid" if $tid; } my %i = caller_info($i); return "$err at $i{file} line $i{line}$tid_msg\n"; } sub short_error_loc { # You have to create your (hash)ref out here, rather than defaulting it # inside trusts *on a lexical*, as you want it to persist across calls. # (You can default it on $_[2], but that gets messy) my $cache = {}; my $i = 1; my $lvl = $CarpLevel; { my $called = caller($i++); my $caller = caller($i); return 0 unless defined($caller); # What happened? redo if $Internal{$caller}; redo if $CarpInternal{$caller}; redo if $CarpInternal{$called}; redo if trusts($called, $caller, $cache); redo if trusts($caller, $called, $cache); redo unless 0 > --$lvl; } return $i - 1; } sub shortmess_heavy { return longmess_heavy(@_) if $Verbose; return @_ if ref($_[0]); # don't break references as exceptions my $i = short_error_loc(); if ($i) { ret_summary($i, @_); } else { longmess_heavy(@_); } } # If a string is too long, trims it with ... sub str_len_trim { my $str = shift; my $max = shift || 0; if (2 < $max and $max < length($str)) { substr($str, $max - 3) = '...'; } return $str; } # Takes two packages and an optional cache. Says whether the # first inherits from the second. # # Recursive versions of this have to work to avoid certain # possible endless loops, and when following long chains of # inheritance are less efficient. sub trusts { my $child = shift; my $parent = shift; my $cache = shift; my ($known, $partial) = get_status($cache, $child); # Figure out consequences until we have an answer while (@$partial and not exists $known->{$parent}) { my $anc = shift @$partial; next if exists $known->{$anc}; $known->{$anc}++; my ($anc_knows, $anc_partial) = get_status($cache, $anc); my @found = keys %$anc_knows; @$known{@found} = (); push @$partial, @$anc_partial; } return exists $known->{$parent}; } # Takes a package and gives a list of those trusted directly sub trusts_directly { my $class = shift; no strict 'refs'; no warnings 'once'; return @{"$class\::CARP_NOT"} ? @{"$class\::CARP_NOT"} : @{"$class\::ISA"}; } 1; FILE924dfc92/Exporter.pm #line 1 "/usr/share/perl/5.10/Exporter.pm" package Exporter; require 5.006; # Be lean. #use strict; #no strict 'refs'; our $Debug = 0; our $ExportLevel = 0; our $Verbose ||= 0; our $VERSION = '5.63'; our (%Cache); # Carp 1.05+ does this now for us, but we may be running with an old Carp $Carp::Internal{Exporter}++; sub as_heavy { require Exporter::Heavy; # Unfortunately, this does not work if the caller is aliased as *name = \&foo # Thus the need to create a lot of identical subroutines my $c = (caller(1))[3]; $c =~ s/.*:://; \&{"Exporter::Heavy::heavy_$c"}; } sub export { goto &{as_heavy()}; } sub import { my $pkg = shift; my $callpkg = caller($ExportLevel); if ($pkg eq "Exporter" and @_ and $_[0] eq "import") { *{$callpkg."::import"} = \&import; return; } # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-( my($exports, $fail) = (\@{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"}); return export $pkg, $callpkg, @_ if $Verbose or $Debug or @$fail > 1; my $export_cache = ($Cache{$pkg} ||= {}); my $args = @_ or @_ = @$exports; local $_; if ($args and not %$export_cache) { s/^&//, $export_cache->{$_} = 1 foreach (@$exports, @{"$pkg\::EXPORT_OK"}); } my $heavy; # Try very hard not to use {} and hence have to enter scope on the foreach # We bomb out of the loop with last as soon as heavy is set. if ($args or $fail) { ($heavy = (/\W/ or $args and not exists $export_cache->{$_} or @$fail and $_ eq $fail->[0])) and last foreach (@_); } else { ($heavy = /\W/) and last foreach (@_); } return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy; local $SIG{__WARN__} = sub {require Carp; &Carp::carp}; # shortcut for the common case of no type character *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_; } # Default methods sub export_fail { my $self = shift; @_; } # Unfortunately, caller(1)[3] "does not work" if the caller is aliased as # *name = \&foo. Thus the need to create a lot of identical subroutines # Otherwise we could have aliased them to export(). sub export_to_level { goto &{as_heavy()}; } sub export_tags { goto &{as_heavy()}; } sub export_ok_tags { goto &{as_heavy()}; } sub require_version { goto &{as_heavy()}; } 1; __END__ FILE7cee3a46/Exporter/Heavy.pm#line 1 "/usr/share/perl/5.10/Exporter/Heavy.pm" package Exporter::Heavy; use strict; no strict 'refs'; # On one line so MakeMaker will see it. require Exporter; our $VERSION = $Exporter::VERSION; # Carp 1.05+ does this now for us, but we may be running with an old Carp $Carp::Internal{'Exporter::Heavy'}++; # # We go to a lot of trouble not to 'require Carp' at file scope, # because Carp requires Exporter, and something has to give. # sub _rebuild_cache { my ($pkg, $exports, $cache) = @_; s/^&// foreach @$exports; @{$cache}{@$exports} = (1) x @$exports; my $ok = \@{"${pkg}::EXPORT_OK"}; if (@$ok) { s/^&// foreach @$ok; @{$cache}{@$ok} = (1) x @$ok; } } sub heavy_export { # First make import warnings look like they're coming from the "use". local $SIG{__WARN__} = sub { my $text = shift; if ($text =~ s/ at \S*Exporter\S*.pm line \d+.*\n//) { require Carp; local $Carp::CarpLevel = 1; # ignore package calling us too. Carp::carp($text); } else { warn $text; } }; local $SIG{__DIE__} = sub { require Carp; local $Carp::CarpLevel = 1; # ignore package calling us too. Carp::croak("$_[0]Illegal null symbol in \@${1}::EXPORT") if $_[0] =~ /^Unable to create sub named "(.*?)::"/; }; my($pkg, $callpkg, @imports) = @_; my($type, $sym, $cache_is_current, $oops); my($exports, $export_cache) = (\@{"${pkg}::EXPORT"}, $Exporter::Cache{$pkg} ||= {}); if (@imports) { if (!%$export_cache) { _rebuild_cache ($pkg, $exports, $export_cache); $cache_is_current = 1; } if (grep m{^[/!:]}, @imports) { my $tagsref = \%{"${pkg}::EXPORT_TAGS"}; my $tagdata; my %imports; my($remove, $spec, @names, @allexports); # negated first item implies starting with default set: unshift @imports, ':DEFAULT' if $imports[0] =~ m/^!/; foreach $spec (@imports){ $remove = $spec =~ s/^!//; if ($spec =~ s/^://){ if ($spec eq 'DEFAULT'){ @names = @$exports; } elsif ($tagdata = $tagsref->{$spec}) { @names = @$tagdata; } else { warn qq["$spec" is not defined in %${pkg}::EXPORT_TAGS]; ++$oops; next; } } elsif ($spec =~ m:^/(.*)/$:){ my $patn = $1; @allexports = keys %$export_cache unless @allexports; # only do keys once @names = grep(/$patn/, @allexports); # not anchored by default } else { @names = ($spec); # is a normal symbol name } warn "Import ".($remove ? "del":"add").": @names " if $Exporter::Verbose; if ($remove) { foreach $sym (@names) { delete $imports{$sym} } } else { @imports{@names} = (1) x @names; } } @imports = keys %imports; } my @carp; foreach $sym (@imports) { if (!$export_cache->{$sym}) { if ($sym =~ m/^\d/) { $pkg->VERSION($sym); # inherit from UNIVERSAL # If the version number was the only thing specified # then we should act as if nothing was specified: if (@imports == 1) { @imports = @$exports; last; } # We need a way to emulate 'use Foo ()' but still # allow an easy version check: "use Foo 1.23, ''"; if (@imports == 2 and !$imports[1]) { @imports = (); last; } } elsif ($sym !~ s/^&// || !$export_cache->{$sym}) { # Last chance - see if they've updated EXPORT_OK since we # cached it. unless ($cache_is_current) { %$export_cache = (); _rebuild_cache ($pkg, $exports, $export_cache); $cache_is_current = 1; } if (!$export_cache->{$sym}) { # accumulate the non-exports push @carp, qq["$sym" is not exported by the $pkg module\n]; $oops++; } } } } if ($oops) { require Carp; Carp::croak("@{carp}Can't continue after import errors"); } } else { @imports = @$exports; } my($fail, $fail_cache) = (\@{"${pkg}::EXPORT_FAIL"}, $Exporter::FailCache{$pkg} ||= {}); if (@$fail) { if (!%$fail_cache) { # Build cache of symbols. Optimise the lookup by adding # barewords twice... both with and without a leading &. # (Technique could be applied to $export_cache at cost of memory) my @expanded = map { /^\w/ ? ($_, '&'.$_) : $_ } @$fail; warn "${pkg}::EXPORT_FAIL cached: @expanded" if $Exporter::Verbose; @{$fail_cache}{@expanded} = (1) x @expanded; } my @failed; foreach $sym (@imports) { push(@failed, $sym) if $fail_cache->{$sym} } if (@failed) { @failed = $pkg->export_fail(@failed); foreach $sym (@failed) { require Carp; Carp::carp(qq["$sym" is not implemented by the $pkg module ], "on this architecture"); } if (@failed) { require Carp; Carp::croak("Can't continue after import errors"); } } } warn "Importing into $callpkg from $pkg: ", join(", ",sort @imports) if $Exporter::Verbose; foreach $sym (@imports) { # shortcut for the common case of no type character (*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}, next) unless $sym =~ s/^(\W)//; $type = $1; no warnings 'once'; *{"${callpkg}::$sym"} = $type eq '&' ? \&{"${pkg}::$sym"} : $type eq '$' ? \${"${pkg}::$sym"} : $type eq '@' ? \@{"${pkg}::$sym"} : $type eq '%' ? \%{"${pkg}::$sym"} : $type eq '*' ? *{"${pkg}::$sym"} : do { require Carp; Carp::croak("Can't export symbol: $type$sym") }; } } sub heavy_export_to_level { my $pkg = shift; my $level = shift; (undef) = shift; # XXX redundant arg my $callpkg = caller($level); $pkg->export($callpkg, @_); } # Utility functions sub _push_tags { my($pkg, $var, $syms) = @_; my @nontag = (); my $export_tags = \%{"${pkg}::EXPORT_TAGS"}; push(@{"${pkg}::$var"}, map { $export_tags->{$_} ? @{$export_tags->{$_}} : scalar(push(@nontag,$_),$_) } (@$syms) ? @$syms : keys %$export_tags); if (@nontag and $^W) { # This may change to a die one day require Carp; Carp::carp(join(", ", @nontag)." are not tags of $pkg"); } } sub heavy_require_version { my($self, $wanted) = @_; my $pkg = ref $self || $self; return ${pkg}->VERSION($wanted); } sub heavy_export_tags { _push_tags((caller)[0], "EXPORT", \@_); } sub heavy_export_ok_tags { _push_tags((caller)[0], "EXPORT_OK", \@_); } 1; FILEab353888/File/Basename.pm#line 1 "/usr/share/perl/5.10/File/Basename.pm" #line 36 package File::Basename; # A bit of juggling to insure that C always works, since # File::Basename is used during the Perl build, when the re extension may # not be available. BEGIN { unless (eval { require re; }) { eval ' sub re::import { $^H |= 0x00100000; } ' } # HINT_RE_TAINT import re 'taint'; } use strict; use 5.006; use warnings; our(@ISA, @EXPORT, $VERSION, $Fileparse_fstype, $Fileparse_igncase); require Exporter; @ISA = qw(Exporter); @EXPORT = qw(fileparse fileparse_set_fstype basename dirname); $VERSION = "2.77"; fileparse_set_fstype($^O); #line 102 sub fileparse { my($fullname,@suffices) = @_; unless (defined $fullname) { require Carp; Carp::croak("fileparse(): need a valid pathname"); } my $orig_type = ''; my($type,$igncase) = ($Fileparse_fstype, $Fileparse_igncase); my($taint) = substr($fullname,0,0); # Is $fullname tainted? if ($type eq "VMS" and $fullname =~ m{/} ) { # We're doing Unix emulation $orig_type = $type; $type = 'Unix'; } my($dirpath, $basename); if (grep { $type eq $_ } qw(MSDOS DOS MSWin32 Epoc)) { ($dirpath,$basename) = ($fullname =~ /^((?:.*[:\\\/])?)(.*)/s); $dirpath .= '.\\' unless $dirpath =~ /[\\\/]\z/; } elsif ($type eq "OS2") { ($dirpath,$basename) = ($fullname =~ m#^((?:.*[:\\/])?)(.*)#s); $dirpath = './' unless $dirpath; # Can't be 0 $dirpath .= '/' unless $dirpath =~ m#[\\/]\z#; } elsif ($type eq "MacOS") { ($dirpath,$basename) = ($fullname =~ /^(.*:)?(.*)/s); $dirpath = ':' unless $dirpath; } elsif ($type eq "AmigaOS") { ($dirpath,$basename) = ($fullname =~ /(.*[:\/])?(.*)/s); $dirpath = './' unless $dirpath; } elsif ($type eq 'VMS' ) { ($dirpath,$basename) = ($fullname =~ /^(.*[:>\]])?(.*)/s); $dirpath ||= ''; # should always be defined } else { # Default to Unix semantics. ($dirpath,$basename) = ($fullname =~ m{^(.*/)?(.*)}s); if ($orig_type eq 'VMS' and $fullname =~ m{^(/[^/]+/000000(/|$))(.*)}) { # dev:[000000] is top of VMS tree, similar to Unix '/' # so strip it off and treat the rest as "normal" my $devspec = $1; my $remainder = $3; ($dirpath,$basename) = ($remainder =~ m{^(.*/)?(.*)}s); $dirpath ||= ''; # should always be defined $dirpath = $devspec.$dirpath; } $dirpath = './' unless $dirpath; } my $tail = ''; my $suffix = ''; if (@suffices) { foreach $suffix (@suffices) { my $pat = ($igncase ? '(?i)' : '') . "($suffix)\$"; if ($basename =~ s/$pat//s) { $taint .= substr($suffix,0,0); $tail = $1 . $tail; } } } # Ensure taint is propgated from the path to its pieces. $tail .= $taint; wantarray ? ($basename .= $taint, $dirpath .= $taint, $tail) : ($basename .= $taint); } #line 212 sub basename { my($path) = shift; # From BSD basename(1) # The basename utility deletes any prefix ending with the last slash `/' # character present in string (after first stripping trailing slashes) _strip_trailing_sep($path); my($basename, $dirname, $suffix) = fileparse( $path, map("\Q$_\E",@_) ); # From BSD basename(1) # The suffix is not stripped if it is identical to the remaining # characters in string. if( length $suffix and !length $basename ) { $basename = $suffix; } # Ensure that basename '/' == '/' if( !length $basename ) { $basename = $dirname; } return $basename; } #line 281 sub dirname { my $path = shift; my($type) = $Fileparse_fstype; if( $type eq 'VMS' and $path =~ m{/} ) { # Parse as Unix local($File::Basename::Fileparse_fstype) = ''; return dirname($path); } my($basename, $dirname) = fileparse($path); if ($type eq 'VMS') { $dirname ||= $ENV{DEFAULT}; } elsif ($type eq 'MacOS') { if( !length($basename) && $dirname !~ /^[^:]+:\z/) { _strip_trailing_sep($dirname); ($basename,$dirname) = fileparse $dirname; } $dirname .= ":" unless $dirname =~ /:\z/; } elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) { _strip_trailing_sep($dirname); unless( length($basename) ) { ($basename,$dirname) = fileparse $dirname; _strip_trailing_sep($dirname); } } elsif ($type eq 'AmigaOS') { if ( $dirname =~ /:\z/) { return $dirname } chop $dirname; $dirname =~ s{[^:/]+\z}{} unless length($basename); } else { _strip_trailing_sep($dirname); unless( length($basename) ) { ($basename,$dirname) = fileparse $dirname; _strip_trailing_sep($dirname); } } $dirname; } # Strip the trailing path separator. sub _strip_trailing_sep { my $type = $Fileparse_fstype; if ($type eq 'MacOS') { $_[0] =~ s/([^:]):\z/$1/s; } elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) { $_[0] =~ s/([^:])[\\\/]*\z/$1/; } else { $_[0] =~ s{(.)/*\z}{$1}s; } } #line 369 BEGIN { my @Ignore_Case = qw(MacOS VMS AmigaOS OS2 RISCOS MSWin32 MSDOS DOS Epoc); my @Types = (@Ignore_Case, qw(Unix)); sub fileparse_set_fstype { my $old = $Fileparse_fstype; if (@_) { my $new_type = shift; $Fileparse_fstype = 'Unix'; # default foreach my $type (@Types) { $Fileparse_fstype = $type if $new_type =~ /^$type/i; } $Fileparse_igncase = (grep $Fileparse_fstype eq $_, @Ignore_Case) ? 1 : 0; } return $old; } } 1; #line 403FILE7ecd3ae7/File/Copy.pm%w#line 1 "/usr/share/perl/5.10/File/Copy.pm" # File/Copy.pm. Written in 1994 by Aaron Sherman . This # source code has been placed in the public domain by the author. # Please be kind and preserve the documentation. # # Additions copyright 1996 by Charles Bailey. Permission is granted # to distribute the revised code under the same terms as Perl itself. package File::Copy; use 5.006; use strict; use warnings; use File::Spec; use Config; # During perl build, we need File::Copy but Fcntl might not be built yet # *** not needed for 2.14, only 2.15 # *** my $Fcntl_loaded = eval q{ use Fcntl qw [O_CREAT O_WRONLY O_TRUNC]; 1 }; # Similarly Scalar::Util # And then we need these games to avoid loading overload, as that will # confuse miniperl during the bootstrap of perl. my $Scalar_Util_loaded = eval q{ require Scalar::Util; require overload; 1 }; our(@ISA, @EXPORT, @EXPORT_OK, $VERSION, $Too_Big, $Syscopy_is_copy); sub copy; sub syscopy; sub cp; sub mv; $VERSION = '2.14'; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(copy move); @EXPORT_OK = qw(cp mv); $Too_Big = 1024 * 1024 * 2; sub croak { require Carp; goto &Carp::croak; } sub carp { require Carp; goto &Carp::carp; } my $macfiles; if ($^O eq 'MacOS') { $macfiles = eval { require Mac::MoreFiles }; warn 'Mac::MoreFiles could not be loaded; using non-native syscopy' if $@ && $^W; } sub _catname { my($from, $to) = @_; if (not defined &basename) { require File::Basename; import File::Basename 'basename'; } if ($^O eq 'MacOS') { # a partial dir name that's valid only in the cwd (e.g. 'tmp') $to = ':' . $to if $to !~ /:/; } return File::Spec->catfile($to, basename($from)); } # _eq($from, $to) tells whether $from and $to are identical sub _eq { my ($from, $to) = map { $Scalar_Util_loaded && Scalar::Util::blessed($_) && overload::Method($_, q{""}) ? "$_" : $_ } (@_); return '' if ( (ref $from) xor (ref $to) ); return $from == $to if ref $from; return $from eq $to; } sub copy { croak("Usage: copy(FROM, TO [, BUFFERSIZE]) ") unless(@_ == 2 || @_ == 3); my $from = shift; my $to = shift; my $size; if (@_) { $size = shift(@_) + 0; croak("Bad buffer size for copy: $size\n") unless ($size > 0); } my $from_a_handle = (ref($from) ? (ref($from) eq 'GLOB' || UNIVERSAL::isa($from, 'GLOB') || UNIVERSAL::isa($from, 'IO::Handle')) : (ref(\$from) eq 'GLOB')); my $to_a_handle = (ref($to) ? (ref($to) eq 'GLOB' || UNIVERSAL::isa($to, 'GLOB') || UNIVERSAL::isa($to, 'IO::Handle')) : (ref(\$to) eq 'GLOB')); if (_eq($from, $to)) { # works for references, too carp("'$from' and '$to' are identical (not copied)"); # The "copy" was a success as the source and destination contain # the same data. return 1; } if ((($Config{d_symlink} && $Config{d_readlink}) || $Config{d_link}) && !($^O eq 'MSWin32' || $^O eq 'os2')) { my @fs = stat($from); if (@fs) { my @ts = stat($to); if (@ts && $fs[0] == $ts[0] && $fs[1] == $ts[1] && !-p $from) { carp("'$from' and '$to' are identical (not copied)"); return 0; } } } if (!$from_a_handle && !$to_a_handle && -d $to && ! -d $from) { $to = _catname($from, $to); } if (defined &syscopy && !$Syscopy_is_copy && !$to_a_handle && !($from_a_handle && $^O eq 'os2' ) # OS/2 cannot handle handles && !($from_a_handle && $^O eq 'mpeix') # and neither can MPE/iX. && !($from_a_handle && $^O eq 'MSWin32') && !($from_a_handle && $^O eq 'MacOS') && !($from_a_handle && $^O eq 'NetWare') ) { my $copy_to = $to; if ($^O eq 'VMS' && -e $from) { if (! -d $to && ! -d $from) { # VMS has sticky defaults on extensions, which means that # if there is a null extension on the destination file, it # will inherit the extension of the source file # So add a '.' for a null extension. $copy_to = VMS::Filespec::vmsify($to); my ($vol, $dirs, $file) = File::Spec->splitpath($copy_to); $file = $file . '.' unless ($file =~ /(?catpath($vol, $dirs, $file); # Get rid of the old versions to be like UNIX 1 while unlink $copy_to; } } return syscopy($from, $copy_to); } my $closefrom = 0; my $closeto = 0; my ($status, $r, $buf); local($\) = ''; my $from_h; if ($from_a_handle) { $from_h = $from; } else { $from = _protect($from) if $from =~ /^\s/s; $from_h = \do { local *FH }; open $from_h, "<", $from or goto fail_open1; binmode $from_h or die "($!,$^E)"; $closefrom = 1; } # Seems most logical to do this here, in case future changes would want to # make this croak for some reason. unless (defined $size) { $size = tied(*$from_h) ? 0 : -s $from_h || 0; $size = 1024 if ($size < 512); $size = $Too_Big if ($size > $Too_Big); } my $to_h; if ($to_a_handle) { $to_h = $to; } else { $to = _protect($to) if $to =~ /^\s/s; $to_h = \do { local *FH }; open $to_h, ">", $to or goto fail_open2; binmode $to_h or die "($!,$^E)"; $closeto = 1; } $! = 0; for (;;) { my ($r, $w, $t); defined($r = sysread($from_h, $buf, $size)) or goto fail_inner; last unless $r; for ($w = 0; $w < $r; $w += $t) { $t = syswrite($to_h, $buf, $r - $w, $w) or goto fail_inner; } } close($to_h) || goto fail_open2 if $closeto; close($from_h) || goto fail_open1 if $closefrom; # Use this idiom to avoid uninitialized value warning. return 1; # All of these contortions try to preserve error messages... fail_inner: if ($closeto) { $status = $!; $! = 0; close $to_h; $! = $status unless $!; } fail_open2: if ($closefrom) { $status = $!; $! = 0; close $from_h; $! = $status unless $!; } fail_open1: return 0; } sub move { croak("Usage: move(FROM, TO) ") unless @_ == 2; my($from,$to) = @_; my($fromsz,$tosz1,$tomt1,$tosz2,$tomt2,$sts,$ossts); if (-d $to && ! -d $from) { $to = _catname($from, $to); } ($tosz1,$tomt1) = (stat($to))[7,9]; $fromsz = -s $from; if ($^O eq 'os2' and defined $tosz1 and defined $fromsz) { # will not rename with overwrite unlink $to; } my $rename_to = $to; if (-$^O eq 'VMS' && -e $from) { if (! -d $to && ! -d $from) { # VMS has sticky defaults on extensions, which means that # if there is a null extension on the destination file, it # will inherit the extension of the source file # So add a '.' for a null extension. $rename_to = VMS::Filespec::vmsify($to); my ($vol, $dirs, $file) = File::Spec->splitpath($rename_to); $file = $file . '.' unless ($file =~ /(?catpath($vol, $dirs, $file); # Get rid of the old versions to be like UNIX 1 while unlink $rename_to; } } return 1 if rename $from, $rename_to; # Did rename return an error even though it succeeded, because $to # is on a remote NFS file system, and NFS lost the server's ack? return 1 if defined($fromsz) && !-e $from && # $from disappeared (($tosz2,$tomt2) = (stat($to))[7,9]) && # $to's there ((!defined $tosz1) || # not before or ($tosz1 != $tosz2 or $tomt1 != $tomt2)) && # was changed $tosz2 == $fromsz; # it's all there ($tosz1,$tomt1) = (stat($to))[7,9]; # just in case rename did something { local $@; eval { local $SIG{__DIE__}; copy($from,$to) or die; my($atime, $mtime) = (stat($from))[8,9]; utime($atime, $mtime, $to); unlink($from) or die; }; return 1 unless $@; } ($sts,$ossts) = ($! + 0, $^E + 0); ($tosz2,$tomt2) = ((stat($to))[7,9],0,0) if defined $tomt1; unlink($to) if !defined($tomt1) or $tomt1 != $tomt2 or $tosz1 != $tosz2; ($!,$^E) = ($sts,$ossts); return 0; } *cp = \© *mv = \&move; if ($^O eq 'MacOS') { *_protect = sub { MacPerl::MakeFSSpec($_[0]) }; } else { *_protect = sub { "./$_[0]" }; } # &syscopy is an XSUB under OS/2 unless (defined &syscopy) { if ($^O eq 'VMS') { *syscopy = \&rmscopy; } elsif ($^O eq 'mpeix') { *syscopy = sub { return 0 unless @_ == 2; # Use the MPE cp program in order to # preserve MPE file attributes. return system('/bin/cp', '-f', $_[0], $_[1]) == 0; }; } elsif ($^O eq 'MSWin32' && defined &DynaLoader::boot_DynaLoader) { # Win32::CopyFile() fill only work if we can load Win32.xs *syscopy = sub { return 0 unless @_ == 2; return Win32::CopyFile(@_, 1); }; } elsif ($macfiles) { *syscopy = sub { my($from, $to) = @_; my($dir, $toname); return 0 unless -e $from; if ($to =~ /(.*:)([^:]+):?$/) { ($dir, $toname) = ($1, $2); } else { ($dir, $toname) = (":", $to); } unlink($to); Mac::MoreFiles::FSpFileCopy($from, $dir, $toname, 1); }; } else { $Syscopy_is_copy = 1; *syscopy = \© } } 1; __END__ #line 533 FILEbfa8f82d/File/Find.pmc#line 1 "/usr/share/perl/5.10/File/Find.pm" package File::Find; use 5.006; use strict; use warnings; use warnings::register; our $VERSION = '1.14'; require Exporter; require Cwd; # # Modified to ensure sub-directory traversal order is not inverded by stack # push and pops. That is remains in the same order as in the directory file, # or user pre-processing (EG:sorted). # #line 419 our @ISA = qw(Exporter); our @EXPORT = qw(find finddepth); use strict; my $Is_VMS; my $Is_MacOS; require File::Basename; require File::Spec; # Should ideally be my() not our() but local() currently # refuses to operate on lexicals our %SLnkSeen; our ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow, $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat, $pre_process, $post_process, $dangling_symlinks); sub contract_name { my ($cdir,$fn) = @_; return substr($cdir,0,rindex($cdir,'/')) if $fn eq $File::Find::current_dir; $cdir = substr($cdir,0,rindex($cdir,'/')+1); $fn =~ s|^\./||; my $abs_name= $cdir . $fn; if (substr($fn,0,3) eq '../') { 1 while $abs_name =~ s!/[^/]*/\.\./!/!; } return $abs_name; } # return the absolute name of a directory or file sub contract_name_Mac { my ($cdir,$fn) = @_; my $abs_name; if ($fn =~ /^(:+)(.*)$/) { # valid pathname starting with a ':' my $colon_count = length ($1); if ($colon_count == 1) { $abs_name = $cdir . $2; return $abs_name; } else { # need to move up the tree, but # only if it's not a volume name for (my $i=1; $i<$colon_count; $i++) { unless ($cdir =~ /^[^:]+:$/) { # volume name $cdir =~ s/[^:]+:$//; } else { return undef; } } $abs_name = $cdir . $2; return $abs_name; } } else { # $fn may be a valid path to a directory or file or (dangling) # symlink, without a leading ':' if ( (-e $fn) || (-l $fn) ) { if ($fn =~ /^[^:]+:/) { # a volume name like DataHD:* return $fn; # $fn is already an absolute path } else { $abs_name = $cdir . $fn; return $abs_name; } } else { # argh!, $fn is not a valid directory/file return undef; } } } sub PathCombine($$) { my ($Base,$Name) = @_; my $AbsName; if ($Is_MacOS) { # $Name is the resolved symlink (always a full path on MacOS), # i.e. there's no need to call contract_name_Mac() $AbsName = $Name; # (simple) check for recursion if ( ( $Base =~ /^$AbsName/) && (-d $AbsName) ) { # recursion return undef; } } else { if (substr($Name,0,1) eq '/') { $AbsName= $Name; } else { $AbsName= contract_name($Base,$Name); } # (simple) check for recursion my $newlen= length($AbsName); if ($newlen <= length($Base)) { if (($newlen == length($Base) || substr($Base,$newlen,1) eq '/') && $AbsName eq substr($Base,0,$newlen)) { return undef; } } } return $AbsName; } sub Follow_SymLink($) { my ($AbsName) = @_; my ($NewName,$DEV, $INO); ($DEV, $INO)= lstat $AbsName; while (-l _) { if ($SLnkSeen{$DEV, $INO}++) { if ($follow_skip < 2) { die "$AbsName is encountered a second time"; } else { return undef; } } $NewName= PathCombine($AbsName, readlink($AbsName)); unless(defined $NewName) { if ($follow_skip < 2) { die "$AbsName is a recursive symbolic link"; } else { return undef; } } else { $AbsName= $NewName; } ($DEV, $INO) = lstat($AbsName); return undef unless defined $DEV; # dangling symbolic link } if ($full_check && defined $DEV && $SLnkSeen{$DEV, $INO}++) { if ( ($follow_skip < 1) || ((-d _) && ($follow_skip < 2)) ) { die "$AbsName encountered a second time"; } else { return undef; } } return $AbsName; } our($dir, $name, $fullname, $prune); sub _find_dir_symlnk($$$); sub _find_dir($$$); # check whether or not a scalar variable is tainted # (code straight from the Camel, 3rd ed., page 561) sub is_tainted_pp { my $arg = shift; my $nada = substr($arg, 0, 0); # zero-length local $@; eval { eval "# $nada" }; return length($@) != 0; } sub _find_opt { my $wanted = shift; die "invalid top directory" unless defined $_[0]; # This function must local()ize everything because callbacks may # call find() or finddepth() local %SLnkSeen; local ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow, $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat, $pre_process, $post_process, $dangling_symlinks); local($dir, $name, $fullname, $prune); local *_ = \my $a; my $cwd = $wanted->{bydepth} ? Cwd::fastcwd() : Cwd::getcwd(); if ($Is_VMS) { # VMS returns this by default in VMS format which just doesn't # work for the rest of this module. $cwd = VMS::Filespec::unixpath($cwd); # Apparently this is not expected to have a trailing space. # To attempt to make VMS/UNIX conversions mostly reversable, # a trailing slash is needed. The run-time functions ignore the # resulting double slash, but it causes the perl tests to fail. $cwd =~ s#/\z##; # This comes up in upper case now, but should be lower. # In the future this could be exact case, no need to change. } my $cwd_untainted = $cwd; my $check_t_cwd = 1; $wanted_callback = $wanted->{wanted}; $bydepth = $wanted->{bydepth}; $pre_process = $wanted->{preprocess}; $post_process = $wanted->{postprocess}; $no_chdir = $wanted->{no_chdir}; $full_check = $^O eq 'MSWin32' ? 0 : $wanted->{follow}; $follow = $^O eq 'MSWin32' ? 0 : $full_check || $wanted->{follow_fast}; $follow_skip = $wanted->{follow_skip}; $untaint = $wanted->{untaint}; $untaint_pat = $wanted->{untaint_pattern}; $untaint_skip = $wanted->{untaint_skip}; $dangling_symlinks = $wanted->{dangling_symlinks}; # for compatibility reasons (find.pl, find2perl) local our ($topdir, $topdev, $topino, $topmode, $topnlink); # a symbolic link to a directory doesn't increase the link count $avoid_nlink = $follow || $File::Find::dont_use_nlink; my ($abs_dir, $Is_Dir); Proc_Top_Item: foreach my $TOP (@_) { my $top_item = $TOP; ($topdev,$topino,$topmode,$topnlink) = $follow ? stat $top_item : lstat $top_item; if ($Is_MacOS) { $top_item = ":$top_item" if ( (-d _) && ( $top_item !~ /:/ ) ); } elsif ($^O eq 'MSWin32') { $top_item =~ s|/\z|| unless $top_item =~ m|\w:/$|; } else { $top_item =~ s|/\z|| unless $top_item eq '/'; } $Is_Dir= 0; if ($follow) { if ($Is_MacOS) { $cwd = "$cwd:" unless ($cwd =~ /:$/); # for safety if ($top_item eq $File::Find::current_dir) { $abs_dir = $cwd; } else { $abs_dir = contract_name_Mac($cwd, $top_item); unless (defined $abs_dir) { warnings::warnif "Can't determine absolute path for $top_item (No such file or directory)\n"; next Proc_Top_Item; } } } else { if (substr($top_item,0,1) eq '/') { $abs_dir = $top_item; } elsif ($top_item eq $File::Find::current_dir) { $abs_dir = $cwd; } else { # care about any ../ $top_item =~ s/\.dir\z//i if $Is_VMS; $abs_dir = contract_name("$cwd/",$top_item); } } $abs_dir= Follow_SymLink($abs_dir); unless (defined $abs_dir) { if ($dangling_symlinks) { if (ref $dangling_symlinks eq 'CODE') { $dangling_symlinks->($top_item, $cwd); } else { warnings::warnif "$top_item is a dangling symbolic link\n"; } } next Proc_Top_Item; } if (-d _) { $top_item =~ s/\.dir\z//i if $Is_VMS; _find_dir_symlnk($wanted, $abs_dir, $top_item); $Is_Dir= 1; } } else { # no follow $topdir = $top_item; unless (defined $topnlink) { warnings::warnif "Can't stat $top_item: $!\n"; next Proc_Top_Item; } if (-d _) { $top_item =~ s/\.dir\z//i if $Is_VMS; _find_dir($wanted, $top_item, $topnlink); $Is_Dir= 1; } else { $abs_dir= $top_item; } } unless ($Is_Dir) { unless (($_,$dir) = File::Basename::fileparse($abs_dir)) { if ($Is_MacOS) { ($dir,$_) = (':', $top_item); # $File::Find::dir, $_ } else { ($dir,$_) = ('./', $top_item); } } $abs_dir = $dir; if (( $untaint ) && (is_tainted($dir) )) { ( $abs_dir ) = $dir =~ m|$untaint_pat|; unless (defined $abs_dir) { if ($untaint_skip == 0) { die "directory $dir is still tainted"; } else { next Proc_Top_Item; } } } unless ($no_chdir || chdir $abs_dir) { warnings::warnif "Couldn't chdir $abs_dir: $!\n"; next Proc_Top_Item; } $name = $abs_dir . $_; # $File::Find::name $_ = $name if $no_chdir; { $wanted_callback->() }; # protect against wild "next" } unless ( $no_chdir ) { if ( ($check_t_cwd) && (($untaint) && (is_tainted($cwd) )) ) { ( $cwd_untainted ) = $cwd =~ m|$untaint_pat|; unless (defined $cwd_untainted) { die "insecure cwd in find(depth)"; } $check_t_cwd = 0; } unless (chdir $cwd_untainted) { die "Can't cd to $cwd: $!\n"; } } } } # API: # $wanted # $p_dir : "parent directory" # $nlink : what came back from the stat # preconditions: # chdir (if not no_chdir) to dir sub _find_dir($$$) { my ($wanted, $p_dir, $nlink) = @_; my ($CdLvl,$Level) = (0,0); my @Stack; my @filenames; my ($subcount,$sub_nlink); my $SE= []; my $dir_name= $p_dir; my $dir_pref; my $dir_rel = $File::Find::current_dir; my $tainted = 0; my $no_nlink; if ($Is_MacOS) { $dir_pref= ($p_dir =~ /:$/) ? $p_dir : "$p_dir:"; # preface } elsif ($^O eq 'MSWin32') { $dir_pref = ($p_dir =~ m|\w:/?$| ? $p_dir : "$p_dir/" ); } elsif ($^O eq 'VMS') { # VMS is returning trailing .dir on directories # and trailing . on files and symbolic links # in UNIX syntax. # $p_dir =~ s/\.(dir)?$//i unless $p_dir eq '.'; $dir_pref = ($p_dir =~ m/[\]>]+$/ ? $p_dir : "$p_dir/" ); } else { $dir_pref= ( $p_dir eq '/' ? '/' : "$p_dir/" ); } local ($dir, $name, $prune, *DIR); unless ( $no_chdir || ($p_dir eq $File::Find::current_dir)) { my $udir = $p_dir; if (( $untaint ) && (is_tainted($p_dir) )) { ( $udir ) = $p_dir =~ m|$untaint_pat|; unless (defined $udir) { if ($untaint_skip == 0) { die "directory $p_dir is still tainted"; } else { return; } } } unless (chdir ($Is_VMS && $udir !~ /[\/\[<]+/ ? "./$udir" : $udir)) { warnings::warnif "Can't cd to $udir: $!\n"; return; } } # push the starting directory push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth; if ($Is_MacOS) { $p_dir = $dir_pref; # ensure trailing ':' } while (defined $SE) { unless ($bydepth) { $dir= $p_dir; # $File::Find::dir $name= $dir_name; # $File::Find::name $_= ($no_chdir ? $dir_name : $dir_rel ); # $_ # prune may happen here $prune= 0; { $wanted_callback->() }; # protect against wild "next" next if $prune; } # change to that directory unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) { my $udir= $dir_rel; if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_rel) )) ) { ( $udir ) = $dir_rel =~ m|$untaint_pat|; unless (defined $udir) { if ($untaint_skip == 0) { if ($Is_MacOS) { die "directory ($p_dir) $dir_rel is still tainted"; } else { die "directory (" . ($p_dir ne '/' ? $p_dir : '') . "/) $dir_rel is still tainted"; } } else { # $untaint_skip == 1 next; } } } unless (chdir ($Is_VMS && $udir !~ /[\/\[<]+/ ? "./$udir" : $udir)) { if ($Is_MacOS) { warnings::warnif "Can't cd to ($p_dir) $udir: $!\n"; } else { warnings::warnif "Can't cd to (" . ($p_dir ne '/' ? $p_dir : '') . "/) $udir: $!\n"; } next; } $CdLvl++; } if ($Is_MacOS) { $dir_name = "$dir_name:" unless ($dir_name =~ /:$/); } $dir= $dir_name; # $File::Find::dir # Get the list of files in the current directory. unless (opendir DIR, ($no_chdir ? $dir_name : $File::Find::current_dir)) { warnings::warnif "Can't opendir($dir_name): $!\n"; next; } @filenames = readdir DIR; closedir(DIR); @filenames = $pre_process->(@filenames) if $pre_process; push @Stack,[$CdLvl,$dir_name,"",-2] if $post_process; # default: use whatever was specifid # (if $nlink >= 2, and $avoid_nlink == 0, this will switch back) $no_nlink = $avoid_nlink; # if dir has wrong nlink count, force switch to slower stat method $no_nlink = 1 if ($nlink < 2); if ($nlink == 2 && !$no_nlink) { # This dir has no subdirectories. for my $FN (@filenames) { if ($Is_VMS) { # Big hammer here - Compensate for VMS trailing . and .dir # No win situation until this is changed, but this # will handle the majority of the cases with breaking the fewest $FN =~ s/\.dir\z//i; $FN =~ s#\.$## if ($FN ne '.'); } next if $FN =~ $File::Find::skip_pattern; $name = $dir_pref . $FN; # $File::Find::name $_ = ($no_chdir ? $name : $FN); # $_ { $wanted_callback->() }; # protect against wild "next" } } else { # This dir has subdirectories. $subcount = $nlink - 2; # HACK: insert directories at this position. so as to preserve # the user pre-processed ordering of files. # EG: directory traversal is in user sorted order, not at random. my $stack_top = @Stack; for my $FN (@filenames) { next if $FN =~ $File::Find::skip_pattern; if ($subcount > 0 || $no_nlink) { # Seen all the subdirs? # check for directoriness. # stat is faster for a file in the current directory $sub_nlink = (lstat ($no_chdir ? $dir_pref . $FN : $FN))[3]; if (-d _) { --$subcount; $FN =~ s/\.dir\z//i if $Is_VMS; # HACK: replace push to preserve dir traversal order #push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink]; splice @Stack, $stack_top, 0, [$CdLvl,$dir_name,$FN,$sub_nlink]; } else { $name = $dir_pref . $FN; # $File::Find::name $_= ($no_chdir ? $name : $FN); # $_ { $wanted_callback->() }; # protect against wild "next" } } else { $name = $dir_pref . $FN; # $File::Find::name $_= ($no_chdir ? $name : $FN); # $_ { $wanted_callback->() }; # protect against wild "next" } } } } continue { while ( defined ($SE = pop @Stack) ) { ($Level, $p_dir, $dir_rel, $nlink) = @$SE; if ($CdLvl > $Level && !$no_chdir) { my $tmp; if ($Is_MacOS) { $tmp = (':' x ($CdLvl-$Level)) . ':'; } elsif ($Is_VMS) { $tmp = '[' . ('-' x ($CdLvl-$Level)) . ']'; } else { $tmp = join('/',('..') x ($CdLvl-$Level)); } die "Can't cd to $tmp from $dir_name" unless chdir ($tmp); $CdLvl = $Level; } if ($Is_MacOS) { # $pdir always has a trailing ':', except for the starting dir, # where $dir_rel eq ':' $dir_name = "$p_dir$dir_rel"; $dir_pref = "$dir_name:"; } elsif ($^O eq 'MSWin32') { $dir_name = ($p_dir =~ m|\w:/?$| ? "$p_dir$dir_rel" : "$p_dir/$dir_rel"); $dir_pref = "$dir_name/"; } elsif ($^O eq 'VMS') { if ($p_dir =~ m/[\]>]+$/) { $dir_name = $p_dir; $dir_name =~ s/([\]>]+)$/.$dir_rel$1/; $dir_pref = $dir_name; } else { $dir_name = "$p_dir/$dir_rel"; $dir_pref = "$dir_name/"; } } else { $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel"); $dir_pref = "$dir_name/"; } if ( $nlink == -2 ) { $name = $dir = $p_dir; # $File::Find::name / dir $_ = $File::Find::current_dir; $post_process->(); # End-of-directory processing } elsif ( $nlink < 0 ) { # must be finddepth, report dirname now $name = $dir_name; if ($Is_MacOS) { if ($dir_rel eq ':') { # must be the top dir, where we started $name =~ s|:$||; # $File::Find::name $p_dir = "$p_dir:" unless ($p_dir =~ /:$/); } $dir = $p_dir; # $File::Find::dir $_ = ($no_chdir ? $name : $dir_rel); # $_ } else { if ( substr($name,-2) eq '/.' ) { substr($name, length($name) == 2 ? -1 : -2) = ''; } $dir = $p_dir; $_ = ($no_chdir ? $dir_name : $dir_rel ); if ( substr($_,-2) eq '/.' ) { substr($_, length($_) == 2 ? -1 : -2) = ''; } } { $wanted_callback->() }; # protect against wild "next" } else { push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth; last; } } } } # API: # $wanted # $dir_loc : absolute location of a dir # $p_dir : "parent directory" # preconditions: # chdir (if not no_chdir) to dir sub _find_dir_symlnk($$$) { my ($wanted, $dir_loc, $p_dir) = @_; # $dir_loc is the absolute directory my @Stack; my @filenames; my $new_loc; my $updir_loc = $dir_loc; # untainted parent directory my $SE = []; my $dir_name = $p_dir; my $dir_pref; my $loc_pref; my $dir_rel = $File::Find::current_dir; my $byd_flag; # flag for pending stack entry if $bydepth my $tainted = 0; my $ok = 1; if ($Is_MacOS) { $dir_pref = ($p_dir =~ /:$/) ? "$p_dir" : "$p_dir:"; $loc_pref = ($dir_loc =~ /:$/) ? "$dir_loc" : "$dir_loc:"; } else { $dir_pref = ( $p_dir eq '/' ? '/' : "$p_dir/" ); $loc_pref = ( $dir_loc eq '/' ? '/' : "$dir_loc/" ); } local ($dir, $name, $fullname, $prune, *DIR); unless ($no_chdir) { # untaint the topdir if (( $untaint ) && (is_tainted($dir_loc) )) { ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|; # parent dir, now untainted # once untainted, $updir_loc is pushed on the stack (as parent directory); # hence, we don't need to untaint the parent directory every time we chdir # to it later unless (defined $updir_loc) { if ($untaint_skip == 0) { die "directory $dir_loc is still tainted"; } else { return; } } } $ok = chdir($updir_loc) unless ($p_dir eq $File::Find::current_dir); unless ($ok) { warnings::warnif "Can't cd to $updir_loc: $!\n"; return; } } push @Stack,[$dir_loc,$updir_loc,$p_dir,$dir_rel,-1] if $bydepth; if ($Is_MacOS) { $p_dir = $dir_pref; # ensure trailing ':' } while (defined $SE) { unless ($bydepth) { # change (back) to parent directory (always untainted) unless ($no_chdir) { unless (chdir $updir_loc) { warnings::warnif "Can't cd to $updir_loc: $!\n"; next; } } $dir= $p_dir; # $File::Find::dir $name= $dir_name; # $File::Find::name $_= ($no_chdir ? $dir_name : $dir_rel ); # $_ $fullname= $dir_loc; # $File::Find::fullname # prune may happen here $prune= 0; lstat($_); # make sure file tests with '_' work { $wanted_callback->() }; # protect against wild "next" next if $prune; } # change to that directory unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) { $updir_loc = $dir_loc; if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_loc) )) ) { # untaint $dir_loc, what will be pushed on the stack as (untainted) parent dir ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|; unless (defined $updir_loc) { if ($untaint_skip == 0) { die "directory $dir_loc is still tainted"; } else { next; } } } unless (chdir $updir_loc) { warnings::warnif "Can't cd to $updir_loc: $!\n"; next; } } if ($Is_MacOS) { $dir_name = "$dir_name:" unless ($dir_name =~ /:$/); } $dir = $dir_name; # $File::Find::dir # Get the list of files in the current directory. unless (opendir DIR, ($no_chdir ? $dir_loc : $File::Find::current_dir)) { warnings::warnif "Can't opendir($dir_loc): $!\n"; next; } @filenames = readdir DIR; closedir(DIR); for my $FN (@filenames) { if ($Is_VMS) { # Big hammer here - Compensate for VMS trailing . and .dir # No win situation until this is changed, but this # will handle the majority of the cases with breaking the fewest. $FN =~ s/\.dir\z//i; $FN =~ s#\.$## if ($FN ne '.'); } next if $FN =~ $File::Find::skip_pattern; # follow symbolic links / do an lstat $new_loc = Follow_SymLink($loc_pref.$FN); # ignore if invalid symlink unless (defined $new_loc) { if (!defined -l _ && $dangling_symlinks) { if (ref $dangling_symlinks eq 'CODE') { $dangling_symlinks->($FN, $dir_pref); } else { warnings::warnif "$dir_pref$FN is a dangling symbolic link\n"; } } $fullname = undef; $name = $dir_pref . $FN; $_ = ($no_chdir ? $name : $FN); { $wanted_callback->() }; next; } if (-d _) { if ($Is_VMS) { $FN =~ s/\.dir\z//i; $FN =~ s#\.$## if ($FN ne '.'); $new_loc =~ s/\.dir\z//i; $new_loc =~ s#\.$## if ($new_loc ne '.'); } push @Stack,[$new_loc,$updir_loc,$dir_name,$FN,1]; } else { $fullname = $new_loc; # $File::Find::fullname $name = $dir_pref . $FN; # $File::Find::name $_ = ($no_chdir ? $name : $FN); # $_ { $wanted_callback->() }; # protect against wild "next" } } } continue { while (defined($SE = pop @Stack)) { ($dir_loc, $updir_loc, $p_dir, $dir_rel, $byd_flag) = @$SE; if ($Is_MacOS) { # $p_dir always has a trailing ':', except for the starting dir, # where $dir_rel eq ':' $dir_name = "$p_dir$dir_rel"; $dir_pref = "$dir_name:"; $loc_pref = ($dir_loc =~ /:$/) ? $dir_loc : "$dir_loc:"; } else { $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel"); $dir_pref = "$dir_name/"; $loc_pref = "$dir_loc/"; } if ( $byd_flag < 0 ) { # must be finddepth, report dirname now unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) { unless (chdir $updir_loc) { # $updir_loc (parent dir) is always untainted warnings::warnif "Can't cd to $updir_loc: $!\n"; next; } } $fullname = $dir_loc; # $File::Find::fullname $name = $dir_name; # $File::Find::name if ($Is_MacOS) { if ($dir_rel eq ':') { # must be the top dir, where we started $name =~ s|:$||; # $File::Find::name $p_dir = "$p_dir:" unless ($p_dir =~ /:$/); } $dir = $p_dir; # $File::Find::dir $_ = ($no_chdir ? $name : $dir_rel); # $_ } else { if ( substr($name,-2) eq '/.' ) { substr($name, length($name) == 2 ? -1 : -2) = ''; # $File::Find::name } $dir = $p_dir; # $File::Find::dir $_ = ($no_chdir ? $dir_name : $dir_rel); # $_ if ( substr($_,-2) eq '/.' ) { substr($_, length($_) == 2 ? -1 : -2) = ''; } } lstat($_); # make sure file tests with '_' work { $wanted_callback->() }; # protect against wild "next" } else { push @Stack,[$dir_loc, $updir_loc, $p_dir, $dir_rel,-1] if $bydepth; last; } } } } sub wrap_wanted { my $wanted = shift; if ( ref($wanted) eq 'HASH' ) { unless( exists $wanted->{wanted} and ref( $wanted->{wanted} ) eq 'CODE' ) { die 'no &wanted subroutine given'; } if ( $wanted->{follow} || $wanted->{follow_fast}) { $wanted->{follow_skip} = 1 unless defined $wanted->{follow_skip}; } if ( $wanted->{untaint} ) { $wanted->{untaint_pattern} = $File::Find::untaint_pattern unless defined $wanted->{untaint_pattern}; $wanted->{untaint_skip} = 0 unless defined $wanted->{untaint_skip}; } return $wanted; } elsif( ref( $wanted ) eq 'CODE' ) { return { wanted => $wanted }; } else { die 'no &wanted subroutine given'; } } sub find { my $wanted = shift; _find_opt(wrap_wanted($wanted), @_); } sub finddepth { my $wanted = wrap_wanted(shift); $wanted->{bydepth} = 1; _find_opt($wanted, @_); } # default $File::Find::skip_pattern = qr/^\.{1,2}\z/; $File::Find::untaint_pattern = qr|^([-+@\w./]+)$|; # These are hard-coded for now, but may move to hint files. if ($^O eq 'VMS') { $Is_VMS = 1; $File::Find::dont_use_nlink = 1; } elsif ($^O eq 'MacOS') { $Is_MacOS = 1; $File::Find::dont_use_nlink = 1; $File::Find::skip_pattern = qr/^Icon\015\z/; $File::Find::untaint_pattern = qr|^(.+)$|; } # this _should_ work properly on all platforms # where File::Find can be expected to work $File::Find::current_dir = File::Spec->curdir || '.'; $File::Find::dont_use_nlink = 1 if $^O eq 'os2' || $^O eq 'dos' || $^O eq 'amigaos' || $^O eq 'MSWin32' || $^O eq 'interix' || $^O eq 'cygwin' || $^O eq 'epoc' || $^O eq 'qnx' || $^O eq 'nto'; # Set dont_use_nlink in your hint file if your system's stat doesn't # report the number of links in a directory as an indication # of the number of files. # See, e.g. hints/machten.sh for MachTen 2.2. unless ($File::Find::dont_use_nlink) { require Config; $File::Find::dont_use_nlink = 1 if ($Config::Config{'dont_use_nlink'}); } # We need a function that checks if a scalar is tainted. Either use the # Scalar::Util module's tainted() function or our (slower) pure Perl # fallback is_tainted_pp() { local $@; eval { require Scalar::Util }; *is_tainted = $@ ? \&is_tainted_pp : \&Scalar::Util::tainted; } 1; FILEc6405ec0/File/Path.pm5#line 1 "/usr/share/perl/5.10/File/Path.pm" package File::Path; use 5.005_04; use strict; use Cwd 'getcwd'; use File::Basename (); use File::Spec (); BEGIN { if ($] < 5.006) { # can't say 'opendir my $dh, $dirname' # need to initialise $dh eval "use Symbol"; } } use Exporter (); use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); $VERSION = '2.07_03'; @ISA = qw(Exporter); @EXPORT = qw(mkpath rmtree); @EXPORT_OK = qw(make_path remove_tree); my $Is_VMS = $^O eq 'VMS'; my $Is_MacOS = $^O eq 'MacOS'; # These OSes complain if you want to remove a file that you have no # write permission to: my $Force_Writeable = grep {$^O eq $_} qw(amigaos dos epoc MSWin32 MacOS os2); # Unix-like systems need to stat each directory in order to detect # race condition. MS-Windows is immune to this particular attack. my $Need_Stat_Check = !($^O eq 'MSWin32'); sub _carp { require Carp; goto &Carp::carp; } sub _croak { require Carp; goto &Carp::croak; } sub _error { my $arg = shift; my $message = shift; my $object = shift; if ($arg->{error}) { $object = '' unless defined $object; $message .= ": $!" if $!; push @{${$arg->{error}}}, {$object => $message}; } else { _carp(defined($object) ? "$message for $object: $!" : "$message: $!"); } } sub make_path { push @_, {} unless @_ and UNIVERSAL::isa($_[-1],'HASH'); goto &mkpath; } sub mkpath { my $old_style = !(@_ and UNIVERSAL::isa($_[-1],'HASH')); my $arg; my $paths; if ($old_style) { my ($verbose, $mode); ($paths, $verbose, $mode) = @_; $paths = [$paths] unless UNIVERSAL::isa($paths,'ARRAY'); $arg->{verbose} = $verbose; $arg->{mode} = defined $mode ? $mode : 0777; } else { $arg = pop @_; $arg->{mode} = delete $arg->{mask} if exists $arg->{mask}; $arg->{mode} = 0777 unless exists $arg->{mode}; ${$arg->{error}} = [] if exists $arg->{error}; $paths = [@_]; } return _mkpath($arg, $paths); } sub _mkpath { my $arg = shift; my $paths = shift; my(@created,$path); foreach $path (@$paths) { next unless defined($path) and length($path); $path .= '/' if $^O eq 'os2' and $path =~ /^\w:\z/s; # feature of CRT # Logic wants Unix paths, so go with the flow. if ($Is_VMS) { next if $path eq '/'; $path = VMS::Filespec::unixify($path); } next if -d $path; my $parent = File::Basename::dirname($path); unless (-d $parent or $path eq $parent) { push(@created,_mkpath($arg, [$parent])); } print "mkdir $path\n" if $arg->{verbose}; if (mkdir($path,$arg->{mode})) { push(@created, $path); } else { my $save_bang = $!; my ($e, $e1) = ($save_bang, $^E); $e .= "; $e1" if $e ne $e1; # allow for another process to have created it meanwhile if (!-d $path) { $! = $save_bang; if ($arg->{error}) { push @{${$arg->{error}}}, {$path => $e}; } else { _croak("mkdir $path: $e"); } } } } return @created; } sub remove_tree { push @_, {} unless @_ and UNIVERSAL::isa($_[-1],'HASH'); goto &rmtree; } sub _is_subdir { my($dir, $test) = @_; my($dv, $dd) = File::Spec->splitpath($dir, 1); my($tv, $td) = File::Spec->splitpath($test, 1); # not on same volume return 0 if $dv ne $tv; my @d = File::Spec->splitdir($dd); my @t = File::Spec->splitdir($td); # @t can't be a subdir if it's shorter than @d return 0 if @t < @d; return join('/', @d) eq join('/', splice @t, 0, +@d); } sub rmtree { my $old_style = !(@_ and UNIVERSAL::isa($_[-1],'HASH')); my $arg; my $paths; if ($old_style) { my ($verbose, $safe); ($paths, $verbose, $safe) = @_; $arg->{verbose} = $verbose; $arg->{safe} = defined $safe ? $safe : 0; if (defined($paths) and length($paths)) { $paths = [$paths] unless UNIVERSAL::isa($paths,'ARRAY'); } else { _carp ("No root path(s) specified\n"); return 0; } } else { $arg = pop @_; ${$arg->{error}} = [] if exists $arg->{error}; ${$arg->{result}} = [] if exists $arg->{result}; $paths = [@_]; } $arg->{prefix} = ''; $arg->{depth} = 0; my @clean_path; $arg->{cwd} = getcwd() or do { _error($arg, "cannot fetch initial working directory"); return 0; }; for ($arg->{cwd}) { /\A(.*)\Z/; $_ = $1 } # untaint for my $p (@$paths) { # need to fixup case and map \ to / on Windows my $ortho_root = $^O eq 'MSWin32' ? _slash_lc($p) : $p; my $ortho_cwd = $^O eq 'MSWin32' ? _slash_lc($arg->{cwd}) : $arg->{cwd}; my $ortho_root_length = length($ortho_root); $ortho_root_length-- if $^O eq 'VMS'; # don't compare '.' with ']' if ($ortho_root_length && _is_subdir($ortho_root, $ortho_cwd)) { local $! = 0; _error($arg, "cannot remove path when cwd is $arg->{cwd}", $p); next; } if ($Is_MacOS) { $p = ":$p" unless $p =~ /:/; $p .= ":" unless $p =~ /:\z/; } elsif ($^O eq 'MSWin32') { $p =~ s{[/\\]\z}{}; } else { $p =~ s{/\z}{}; } push @clean_path, $p; } @{$arg}{qw(device inode perm)} = (lstat $arg->{cwd})[0,1] or do { _error($arg, "cannot stat initial working directory", $arg->{cwd}); return 0; }; return _rmtree($arg, \@clean_path); } sub _rmtree { my $arg = shift; my $paths = shift; my $count = 0; my $curdir = File::Spec->curdir(); my $updir = File::Spec->updir(); my (@files, $root); ROOT_DIR: foreach $root (@$paths) { # since we chdir into each directory, it may not be obvious # to figure out where we are if we generate a message about # a file name. We therefore construct a semi-canonical # filename, anchored from the directory being unlinked (as # opposed to being truly canonical, anchored from the root (/). my $canon = $arg->{prefix} ? File::Spec->catfile($arg->{prefix}, $root) : $root ; my ($ldev, $lino, $perm) = (lstat $root)[0,1,2] or next ROOT_DIR; if ( -d _ ) { $root = VMS::Filespec::pathify($root) if $Is_VMS; if (!chdir($root)) { # see if we can escalate privileges to get in # (e.g. funny protection mask such as -w- instead of rwx) $perm &= 07777; my $nperm = $perm | 0700; if (!($arg->{safe} or $nperm == $perm or chmod($nperm, $root))) { _error($arg, "cannot make child directory read-write-exec", $canon); next ROOT_DIR; } elsif (!chdir($root)) { _error($arg, "cannot chdir to child", $canon); next ROOT_DIR; } } my ($cur_dev, $cur_inode, $perm) = (stat $curdir)[0,1,2] or do { _error($arg, "cannot stat current working directory", $canon); next ROOT_DIR; }; if ($Need_Stat_Check) { ($ldev eq $cur_dev and $lino eq $cur_inode) or _croak("directory $canon changed before chdir, expected dev=$ldev ino=$lino, actual dev=$cur_dev ino=$cur_inode, aborting."); } $perm &= 07777; # don't forget setuid, setgid, sticky bits my $nperm = $perm | 0700; # notabene: 0700 is for making readable in the first place, # it's also intended to change it to writable in case we have # to recurse in which case we are better than rm -rf for # subtrees with strange permissions if (!($arg->{safe} or $nperm == $perm or chmod($nperm, $curdir))) { _error($arg, "cannot make directory read+writeable", $canon); $nperm = $perm; } my $d; $d = gensym() if $] < 5.006; if (!opendir $d, $curdir) { _error($arg, "cannot opendir", $canon); @files = (); } else { no strict 'refs'; if (!defined ${"\cTAINT"} or ${"\cTAINT"}) { # Blindly untaint dir names if taint mode is # active, or any perl < 5.006 @files = map { /\A(.*)\z/s; $1 } readdir $d; } else { @files = readdir $d; } closedir $d; } if ($Is_VMS) { # Deleting large numbers of files from VMS Files-11 # filesystems is faster if done in reverse ASCIIbetical order. # include '.' to '.;' from blead patch #31775 @files = map {$_ eq '.' ? '.;' : $_} reverse @files; ($root = VMS::Filespec::unixify($root)) =~ s/\.dir\z//; } @files = grep {$_ ne $updir and $_ ne $curdir} @files; if (@files) { # remove the contained files before the directory itself my $narg = {%$arg}; @{$narg}{qw(device inode cwd prefix depth)} = ($cur_dev, $cur_inode, $updir, $canon, $arg->{depth}+1); $count += _rmtree($narg, \@files); } # restore directory permissions of required now (in case the rmdir # below fails), while we are still in the directory and may do so # without a race via '.' if ($nperm != $perm and not chmod($perm, $curdir)) { _error($arg, "cannot reset chmod", $canon); } # don't leave the client code in an unexpected directory chdir($arg->{cwd}) or _croak("cannot chdir to $arg->{cwd} from $canon: $!, aborting."); # ensure that a chdir upwards didn't take us somewhere other # than we expected (see CVE-2002-0435) ($cur_dev, $cur_inode) = (stat $curdir)[0,1] or _croak("cannot stat prior working directory $arg->{cwd}: $!, aborting."); if ($Need_Stat_Check) { ($arg->{device} eq $cur_dev and $arg->{inode} eq $cur_inode) or _croak("previous directory $arg->{cwd} changed before entering $canon, expected dev=$ldev ino=$lino, actual dev=$cur_dev ino=$cur_inode, aborting."); } if ($arg->{depth} or !$arg->{keep_root}) { if ($arg->{safe} && ($Is_VMS ? !&VMS::Filespec::candelete($root) : !-w $root)) { print "skipped $root\n" if $arg->{verbose}; next ROOT_DIR; } if ($Force_Writeable and !chmod $perm | 0700, $root) { _error($arg, "cannot make directory writeable", $canon); } print "rmdir $root\n" if $arg->{verbose}; if (rmdir $root) { push @{${$arg->{result}}}, $root if $arg->{result}; ++$count; } else { _error($arg, "cannot remove directory", $canon); if ($Force_Writeable && !chmod($perm, ($Is_VMS ? VMS::Filespec::fileify($root) : $root)) ) { _error($arg, sprintf("cannot restore permissions to 0%o",$perm), $canon); } } } } else { # not a directory $root = VMS::Filespec::vmsify("./$root") if $Is_VMS && !File::Spec->file_name_is_absolute($root) && ($root !~ m/(?]+/); # not already in VMS syntax if ($arg->{safe} && ($Is_VMS ? !&VMS::Filespec::candelete($root) : !(-l $root || -w $root))) { print "skipped $root\n" if $arg->{verbose}; next ROOT_DIR; } my $nperm = $perm & 07777 | 0600; if ($Force_Writeable and $nperm != $perm and not chmod $nperm, $root) { _error($arg, "cannot make file writeable", $canon); } print "unlink $canon\n" if $arg->{verbose}; # delete all versions under VMS for (;;) { if (unlink $root) { push @{${$arg->{result}}}, $root if $arg->{result}; } else { _error($arg, "cannot unlink file", $canon); $Force_Writeable and chmod($perm, $root) or _error($arg, sprintf("cannot restore permissions to 0%o",$perm), $canon); last; } ++$count; last unless $Is_VMS && lstat $root; } } } return $count; } sub _slash_lc { # fix up slashes and case on MSWin32 so that we can determine that # c:\path\to\dir is underneath C:/Path/To my $path = shift; $path =~ tr{\\}{/}; return lc($path); } 1; __END__ #line 896 FILE6b3c9548/File/Temp.pm9#line 1 "/usr/share/perl/5.10/File/Temp.pm" package File::Temp; #line 138 # 5.6.0 gives us S_IWOTH, S_IWGRP, our and auto-vivifying filehandls # People would like a version on 5.004 so give them what they want :-) use 5.004; use strict; use Carp; use File::Spec 0.8; use File::Path qw/ rmtree /; use Fcntl 1.03; use IO::Seekable; # For SEEK_* use Errno; require VMS::Stdio if $^O eq 'VMS'; # pre-emptively load Carp::Heavy. If we don't when we run out of file # handles and attempt to call croak() we get an error message telling # us that Carp::Heavy won't load rather than an error telling us we # have run out of file handles. We either preload croak() or we # switch the calls to croak from _gettemp() to use die. eval { require Carp::Heavy; }; # Need the Symbol package if we are running older perl require Symbol if $] < 5.006; ### For the OO interface use base qw/ IO::Handle IO::Seekable /; use overload '""' => "STRINGIFY", fallback => 1; # use 'our' on v5.6.0 use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS $DEBUG $KEEP_ALL); $DEBUG = 0; $KEEP_ALL = 0; # We are exporting functions use base qw/Exporter/; # Export list - to allow fine tuning of export table @EXPORT_OK = qw{ tempfile tempdir tmpnam tmpfile mktemp mkstemp mkstemps mkdtemp unlink0 cleanup SEEK_SET SEEK_CUR SEEK_END }; # Groups of functions for export %EXPORT_TAGS = ( 'POSIX' => [qw/ tmpnam tmpfile /], 'mktemp' => [qw/ mktemp mkstemp mkstemps mkdtemp/], 'seekable' => [qw/ SEEK_SET SEEK_CUR SEEK_END /], ); # add contents of these tags to @EXPORT Exporter::export_tags('POSIX','mktemp','seekable'); # Version number $VERSION = '0.22'; # This is a list of characters that can be used in random filenames my @CHARS = (qw/ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 _ /); # Maximum number of tries to make a temp file before failing use constant MAX_TRIES => 1000; # Minimum number of X characters that should be in a template use constant MINX => 4; # Default template when no template supplied use constant TEMPXXX => 'X' x 10; # Constants for the security level use constant STANDARD => 0; use constant MEDIUM => 1; use constant HIGH => 2; # OPENFLAGS. If we defined the flag to use with Sysopen here this gives # us an optimisation when many temporary files are requested my $OPENFLAGS = O_CREAT | O_EXCL | O_RDWR; my $LOCKFLAG; unless ($^O eq 'MacOS') { for my $oflag (qw/ NOFOLLOW BINARY LARGEFILE NOINHERIT /) { my ($bit, $func) = (0, "Fcntl::O_" . $oflag); no strict 'refs'; $OPENFLAGS |= $bit if eval { # Make sure that redefined die handlers do not cause problems # e.g. CGI::Carp local $SIG{__DIE__} = sub {}; local $SIG{__WARN__} = sub {}; $bit = &$func(); 1; }; } # Special case O_EXLOCK $LOCKFLAG = eval { local $SIG{__DIE__} = sub {}; local $SIG{__WARN__} = sub {}; &Fcntl::O_EXLOCK(); }; } # On some systems the O_TEMPORARY flag can be used to tell the OS # to automatically remove the file when it is closed. This is fine # in most cases but not if tempfile is called with UNLINK=>0 and # the filename is requested -- in the case where the filename is to # be passed to another routine. This happens on windows. We overcome # this by using a second open flags variable my $OPENTEMPFLAGS = $OPENFLAGS; unless ($^O eq 'MacOS') { for my $oflag (qw/ TEMPORARY /) { my ($bit, $func) = (0, "Fcntl::O_" . $oflag); local($@); no strict 'refs'; $OPENTEMPFLAGS |= $bit if eval { # Make sure that redefined die handlers do not cause problems # e.g. CGI::Carp local $SIG{__DIE__} = sub {}; local $SIG{__WARN__} = sub {}; $bit = &$func(); 1; }; } } # Private hash tracking which files have been created by each process id via the OO interface my %FILES_CREATED_BY_OBJECT; # INTERNAL ROUTINES - not to be used outside of package # Generic routine for getting a temporary filename # modelled on OpenBSD _gettemp() in mktemp.c # The template must contain X's that are to be replaced # with the random values # Arguments: # TEMPLATE - string containing the XXXXX's that is converted # to a random filename and opened if required # Optionally, a hash can also be supplied containing specific options # "open" => if true open the temp file, else just return the name # default is 0 # "mkdir"=> if true, we are creating a temp directory rather than tempfile # default is 0 # "suffixlen" => number of characters at end of PATH to be ignored. # default is 0. # "unlink_on_close" => indicates that, if possible, the OS should remove # the file as soon as it is closed. Usually indicates # use of the O_TEMPORARY flag to sysopen. # Usually irrelevant on unix # "use_exlock" => Indicates that O_EXLOCK should be used. Default is true. # Optionally a reference to a scalar can be passed into the function # On error this will be used to store the reason for the error # "ErrStr" => \$errstr # "open" and "mkdir" can not both be true # "unlink_on_close" is not used when "mkdir" is true. # The default options are equivalent to mktemp(). # Returns: # filehandle - open file handle (if called with doopen=1, else undef) # temp name - name of the temp file or directory # For example: # ($fh, $name) = _gettemp($template, "open" => 1); # for the current version, failures are associated with # stored in an error string and returned to give the reason whilst debugging # This routine is not called by any external function sub _gettemp { croak 'Usage: ($fh, $name) = _gettemp($template, OPTIONS);' unless scalar(@_) >= 1; # the internal error string - expect it to be overridden # Need this in case the caller decides not to supply us a value # need an anonymous scalar my $tempErrStr; # Default options my %options = ( "open" => 0, "mkdir" => 0, "suffixlen" => 0, "unlink_on_close" => 0, "use_exlock" => 1, "ErrStr" => \$tempErrStr, ); # Read the template my $template = shift; if (ref($template)) { # Use a warning here since we have not yet merged ErrStr carp "File::Temp::_gettemp: template must not be a reference"; return (); } # Check that the number of entries on stack are even if (scalar(@_) % 2 != 0) { # Use a warning here since we have not yet merged ErrStr carp "File::Temp::_gettemp: Must have even number of options"; return (); } # Read the options and merge with defaults %options = (%options, @_) if @_; # Make sure the error string is set to undef ${$options{ErrStr}} = undef; # Can not open the file and make a directory in a single call if ($options{"open"} && $options{"mkdir"}) { ${$options{ErrStr}} = "doopen and domkdir can not both be true\n"; return (); } # Find the start of the end of the Xs (position of last X) # Substr starts from 0 my $start = length($template) - 1 - $options{"suffixlen"}; # Check that we have at least MINX x X (e.g. 'XXXX") at the end of the string # (taking suffixlen into account). Any fewer is insecure. # Do it using substr - no reason to use a pattern match since # we know where we are looking and what we are looking for if (substr($template, $start - MINX + 1, MINX) ne 'X' x MINX) { ${$options{ErrStr}} = "The template must end with at least ". MINX . " 'X' characters\n"; return (); } # Replace all the X at the end of the substring with a # random character or just all the XX at the end of a full string. # Do it as an if, since the suffix adjusts which section to replace # and suffixlen=0 returns nothing if used in the substr directly # and generate a full path from the template my $path = _replace_XX($template, $options{"suffixlen"}); # Split the path into constituent parts - eventually we need to check # whether the directory exists # We need to know whether we are making a temp directory # or a tempfile my ($volume, $directories, $file); my $parent; # parent directory if ($options{"mkdir"}) { # There is no filename at the end ($volume, $directories, $file) = File::Spec->splitpath( $path, 1); # The parent is then $directories without the last directory # Split the directory and put it back together again my @dirs = File::Spec->splitdir($directories); # If @dirs only has one entry (i.e. the directory template) that means # we are in the current directory if ($#dirs == 0) { $parent = File::Spec->curdir; } else { if ($^O eq 'VMS') { # need volume to avoid relative dir spec $parent = File::Spec->catdir($volume, @dirs[0..$#dirs-1]); $parent = 'sys$disk:[]' if $parent eq ''; } else { # Put it back together without the last one $parent = File::Spec->catdir(@dirs[0..$#dirs-1]); # ...and attach the volume (no filename) $parent = File::Spec->catpath($volume, $parent, ''); } } } else { # Get rid of the last filename (use File::Basename for this?) ($volume, $directories, $file) = File::Spec->splitpath( $path ); # Join up without the file part $parent = File::Spec->catpath($volume,$directories,''); # If $parent is empty replace with curdir $parent = File::Spec->curdir unless $directories ne ''; } # Check that the parent directories exist # Do this even for the case where we are simply returning a name # not a file -- no point returning a name that includes a directory # that does not exist or is not writable unless (-e $parent) { ${$options{ErrStr}} = "Parent directory ($parent) does not exist"; return (); } unless (-d $parent) { ${$options{ErrStr}} = "Parent directory ($parent) is not a directory"; return (); } # Check the stickiness of the directory and chown giveaway if required # If the directory is world writable the sticky bit # must be set if (File::Temp->safe_level == MEDIUM) { my $safeerr; unless (_is_safe($parent,\$safeerr)) { ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)"; return (); } } elsif (File::Temp->safe_level == HIGH) { my $safeerr; unless (_is_verysafe($parent, \$safeerr)) { ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)"; return (); } } # Now try MAX_TRIES time to open the file for (my $i = 0; $i < MAX_TRIES; $i++) { # Try to open the file if requested if ($options{"open"}) { my $fh; # If we are running before perl5.6.0 we can not auto-vivify if ($] < 5.006) { $fh = &Symbol::gensym; } # Try to make sure this will be marked close-on-exec # XXX: Win32 doesn't respect this, nor the proper fcntl, # but may have O_NOINHERIT. This may or may not be in Fcntl. local $^F = 2; # Attempt to open the file my $open_success = undef; if ( $^O eq 'VMS' and $options{"unlink_on_close"} && !$KEEP_ALL) { # make it auto delete on close by setting FAB$V_DLT bit $fh = VMS::Stdio::vmssysopen($path, $OPENFLAGS, 0600, 'fop=dlt'); $open_success = $fh; } else { my $flags = ( ($options{"unlink_on_close"} && !$KEEP_ALL) ? $OPENTEMPFLAGS : $OPENFLAGS ); $flags |= $LOCKFLAG if (defined $LOCKFLAG && $options{use_exlock}); $open_success = sysopen($fh, $path, $flags, 0600); } if ( $open_success ) { # in case of odd umask force rw chmod(0600, $path); # Opened successfully - return file handle and name return ($fh, $path); } else { # Error opening file - abort with error # if the reason was anything but EEXIST unless ($!{EEXIST}) { ${$options{ErrStr}} = "Could not create temp file $path: $!"; return (); } # Loop round for another try } } elsif ($options{"mkdir"}) { # Open the temp directory if (mkdir( $path, 0700)) { # in case of odd umask chmod(0700, $path); return undef, $path; } else { # Abort with error if the reason for failure was anything # except EEXIST unless ($!{EEXIST}) { ${$options{ErrStr}} = "Could not create directory $path: $!"; return (); } # Loop round for another try } } else { # Return true if the file can not be found # Directory has been checked previously return (undef, $path) unless -e $path; # Try again until MAX_TRIES } # Did not successfully open the tempfile/dir # so try again with a different set of random letters # No point in trying to increment unless we have only # 1 X say and the randomness could come up with the same # file MAX_TRIES in a row. # Store current attempt - in principal this implies that the # 3rd time around the open attempt that the first temp file # name could be generated again. Probably should store each # attempt and make sure that none are repeated my $original = $path; my $counter = 0; # Stop infinite loop my $MAX_GUESS = 50; do { # Generate new name from original template $path = _replace_XX($template, $options{"suffixlen"}); $counter++; } until ($path ne $original || $counter > $MAX_GUESS); # Check for out of control looping if ($counter > $MAX_GUESS) { ${$options{ErrStr}} = "Tried to get a new temp name different to the previous value $MAX_GUESS times.\nSomething wrong with template?? ($template)"; return (); } } # If we get here, we have run out of tries ${ $options{ErrStr} } = "Have exceeded the maximum number of attempts (" . MAX_TRIES . ") to open temp file/dir"; return (); } # Internal routine to replace the XXXX... with random characters # This has to be done by _gettemp() every time it fails to # open a temp file/dir # Arguments: $template (the template with XXX), # $ignore (number of characters at end to ignore) # Returns: modified template sub _replace_XX { croak 'Usage: _replace_XX($template, $ignore)' unless scalar(@_) == 2; my ($path, $ignore) = @_; # Do it as an if, since the suffix adjusts which section to replace # and suffixlen=0 returns nothing if used in the substr directly # Alternatively, could simply set $ignore to length($path)-1 # Don't want to always use substr when not required though. my $end = ( $] >= 5.006 ? "\\z" : "\\Z" ); if ($ignore) { substr($path, 0, - $ignore) =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge; } else { $path =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge; } return $path; } # Internal routine to force a temp file to be writable after # it is created so that we can unlink it. Windows seems to occassionally # force a file to be readonly when written to certain temp locations sub _force_writable { my $file = shift; chmod 0600, $file; } # internal routine to check to see if the directory is safe # First checks to see if the directory is not owned by the # current user or root. Then checks to see if anyone else # can write to the directory and if so, checks to see if # it has the sticky bit set # Will not work on systems that do not support sticky bit #Args: directory path to check # Optionally: reference to scalar to contain error message # Returns true if the path is safe and false otherwise. # Returns undef if can not even run stat() on the path # This routine based on version written by Tom Christiansen # Presumably, by the time we actually attempt to create the # file or directory in this directory, it may not be safe # anymore... Have to run _is_safe directly after the open. sub _is_safe { my $path = shift; my $err_ref = shift; # Stat path my @info = stat($path); unless (scalar(@info)) { $$err_ref = "stat(path) returned no values"; return 0; } ; return 1 if $^O eq 'VMS'; # owner delete control at file level # Check to see whether owner is neither superuser (or a system uid) nor me # Use the effective uid from the $> variable # UID is in [4] if ($info[4] > File::Temp->top_system_uid() && $info[4] != $>) { Carp::cluck(sprintf "uid=$info[4] topuid=%s euid=$> path='$path'", File::Temp->top_system_uid()); $$err_ref = "Directory owned neither by root nor the current user" if ref($err_ref); return 0; } # check whether group or other can write file # use 066 to detect either reading or writing # use 022 to check writability # Do it with S_IWOTH and S_IWGRP for portability (maybe) # mode is in info[2] if (($info[2] & &Fcntl::S_IWGRP) || # Is group writable? ($info[2] & &Fcntl::S_IWOTH) ) { # Is world writable? # Must be a directory unless (-d $path) { $$err_ref = "Path ($path) is not a directory" if ref($err_ref); return 0; } # Must have sticky bit set unless (-k $path) { $$err_ref = "Sticky bit not set on $path when dir is group|world writable" if ref($err_ref); return 0; } } return 1; } # Internal routine to check whether a directory is safe # for temp files. Safer than _is_safe since it checks for # the possibility of chown giveaway and if that is a possibility # checks each directory in the path to see if it is safe (with _is_safe) # If _PC_CHOWN_RESTRICTED is not set, does the full test of each # directory anyway. # Takes optional second arg as scalar ref to error reason sub _is_verysafe { # Need POSIX - but only want to bother if really necessary due to overhead require POSIX; my $path = shift; print "_is_verysafe testing $path\n" if $DEBUG; return 1 if $^O eq 'VMS'; # owner delete control at file level my $err_ref = shift; # Should Get the value of _PC_CHOWN_RESTRICTED if it is defined # and If it is not there do the extensive test local($@); my $chown_restricted; $chown_restricted = &POSIX::_PC_CHOWN_RESTRICTED() if eval { &POSIX::_PC_CHOWN_RESTRICTED(); 1}; # If chown_resticted is set to some value we should test it if (defined $chown_restricted) { # Return if the current directory is safe return _is_safe($path,$err_ref) if POSIX::sysconf( $chown_restricted ); } # To reach this point either, the _PC_CHOWN_RESTRICTED symbol # was not avialable or the symbol was there but chown giveaway # is allowed. Either way, we now have to test the entire tree for # safety. # Convert path to an absolute directory if required unless (File::Spec->file_name_is_absolute($path)) { $path = File::Spec->rel2abs($path); } # Split directory into components - assume no file my ($volume, $directories, undef) = File::Spec->splitpath( $path, 1); # Slightly less efficient than having a function in File::Spec # to chop off the end of a directory or even a function that # can handle ../ in a directory tree # Sometimes splitdir() returns a blank at the end # so we will probably check the bottom directory twice in some cases my @dirs = File::Spec->splitdir($directories); # Concatenate one less directory each time around foreach my $pos (0.. $#dirs) { # Get a directory name my $dir = File::Spec->catpath($volume, File::Spec->catdir(@dirs[0.. $#dirs - $pos]), '' ); print "TESTING DIR $dir\n" if $DEBUG; # Check the directory return 0 unless _is_safe($dir,$err_ref); } return 1; } # internal routine to determine whether unlink works on this # platform for files that are currently open. # Returns true if we can, false otherwise. # Currently WinNT, OS/2 and VMS can not unlink an opened file # On VMS this is because the O_EXCL flag is used to open the # temporary file. Currently I do not know enough about the issues # on VMS to decide whether O_EXCL is a requirement. sub _can_unlink_opened_file { if ($^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'VMS' || $^O eq 'dos' || $^O eq 'MacOS') { return 0; } else { return 1; } } # internal routine to decide which security levels are allowed # see safe_level() for more information on this # Controls whether the supplied security level is allowed # $cando = _can_do_level( $level ) sub _can_do_level { # Get security level my $level = shift; # Always have to be able to do STANDARD return 1 if $level == STANDARD; # Currently, the systems that can do HIGH or MEDIUM are identical if ( $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'cygwin' || $^O eq 'dos' || $^O eq 'MacOS' || $^O eq 'mpeix') { return 0; } else { return 1; } } # This routine sets up a deferred unlinking of a specified # filename and filehandle. It is used in the following cases: # - Called by unlink0 if an opened file can not be unlinked # - Called by tempfile() if files are to be removed on shutdown # - Called by tempdir() if directories are to be removed on shutdown # Arguments: # _deferred_unlink( $fh, $fname, $isdir ); # # - filehandle (so that it can be expclicitly closed if open # - filename (the thing we want to remove) # - isdir (flag to indicate that we are being given a directory) # [and hence no filehandle] # Status is not referred to since all the magic is done with an END block { # Will set up two lexical variables to contain all the files to be # removed. One array for files, another for directories They will # only exist in this block. # This means we only have to set up a single END block to remove # all files. # in order to prevent child processes inadvertently deleting the parent # temp files we use a hash to store the temp files and directories # created by a particular process id. # %files_to_unlink contains values that are references to an array of # array references containing the filehandle and filename associated with # the temp file. my (%files_to_unlink, %dirs_to_unlink); # Set up an end block to use these arrays END { local($., $@, $!, $^E, $?); cleanup(); } # Cleanup function. Always triggered on END but can be invoked # manually. sub cleanup { if (!$KEEP_ALL) { # Files my @files = (exists $files_to_unlink{$$} ? @{ $files_to_unlink{$$} } : () ); foreach my $file (@files) { # close the filehandle without checking its state # in order to make real sure that this is closed # if its already closed then I dont care about the answer # probably a better way to do this close($file->[0]); # file handle is [0] if (-f $file->[1]) { # file name is [1] _force_writable( $file->[1] ); # for windows unlink $file->[1] or warn "Error removing ".$file->[1]; } } # Dirs my @dirs = (exists $dirs_to_unlink{$$} ? @{ $dirs_to_unlink{$$} } : () ); foreach my $dir (@dirs) { if (-d $dir) { # Some versions of rmtree will abort if you attempt to remove # the directory you are sitting in. We protect that and turn it # into a warning. We do this because this occurs during # cleanup and so can not be caught by the user. eval { rmtree($dir, $DEBUG, 0); }; warn $@ if ($@ && $^W); } } # clear the arrays @{ $files_to_unlink{$$} } = () if exists $files_to_unlink{$$}; @{ $dirs_to_unlink{$$} } = () if exists $dirs_to_unlink{$$}; } } # This is the sub called to register a file for deferred unlinking # This could simply store the input parameters and defer everything # until the END block. For now we do a bit of checking at this # point in order to make sure that (1) we have a file/dir to delete # and (2) we have been called with the correct arguments. sub _deferred_unlink { croak 'Usage: _deferred_unlink($fh, $fname, $isdir)' unless scalar(@_) == 3; my ($fh, $fname, $isdir) = @_; warn "Setting up deferred removal of $fname\n" if $DEBUG; # If we have a directory, check that it is a directory if ($isdir) { if (-d $fname) { # Directory exists so store it # first on VMS turn []foo into [.foo] for rmtree $fname = VMS::Filespec::vmspath($fname) if $^O eq 'VMS'; $dirs_to_unlink{$$} = [] unless exists $dirs_to_unlink{$$}; push (@{ $dirs_to_unlink{$$} }, $fname); } else { carp "Request to remove directory $fname could not be completed since it does not exist!\n" if $^W; } } else { if (-f $fname) { # file exists so store handle and name for later removal $files_to_unlink{$$} = [] unless exists $files_to_unlink{$$}; push(@{ $files_to_unlink{$$} }, [$fh, $fname]); } else { carp "Request to remove file $fname could not be completed since it is not there!\n" if $^W; } } } } #line 1008 sub new { my $proto = shift; my $class = ref($proto) || $proto; # read arguments and convert keys to upper case my %args = @_; %args = map { uc($_), $args{$_} } keys %args; # see if they are unlinking (defaulting to yes) my $unlink = (exists $args{UNLINK} ? $args{UNLINK} : 1 ); delete $args{UNLINK}; # template (store it in an array so that it will # disappear from the arg list of tempfile) my @template = ( exists $args{TEMPLATE} ? $args{TEMPLATE} : () ); delete $args{TEMPLATE}; # Protect OPEN delete $args{OPEN}; # Open the file and retain file handle and file name my ($fh, $path) = tempfile( @template, %args ); print "Tmp: $fh - $path\n" if $DEBUG; # Store the filename in the scalar slot ${*$fh} = $path; # Cache the filename by pid so that the destructor can decide whether to remove it $FILES_CREATED_BY_OBJECT{$$}{$path} = 1; # Store unlink information in hash slot (plus other constructor info) %{*$fh} = %args; # create the object bless $fh, $class; # final method-based configuration $fh->unlink_on_destroy( $unlink ); return $fh; } #line 1066 sub newdir { my $self = shift; # need to handle args as in tempdir because we have to force CLEANUP # default without passing CLEANUP to tempdir my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef ); my %options = @_; my $cleanup = (exists $options{CLEANUP} ? $options{CLEANUP} : 1 ); delete $options{CLEANUP}; my $tempdir; if (defined $template) { $tempdir = tempdir( $template, %options ); } else { $tempdir = tempdir( %options ); } return bless { DIRNAME => $tempdir, CLEANUP => $cleanup, LAUNCHPID => $$, }, "File::Temp::Dir"; } #line 1101 sub filename { my $self = shift; return ${*$self}; } sub STRINGIFY { my $self = shift; return $self->filename; } #line 1131 sub unlink_on_destroy { my $self = shift; if (@_) { ${*$self}{UNLINK} = shift; } return ${*$self}{UNLINK}; } #line 1160 sub DESTROY { local($., $@, $!, $^E, $?); my $self = shift; # Make sure we always remove the file from the global hash # on destruction. This prevents the hash from growing uncontrollably # and post-destruction there is no reason to know about the file. my $file = $self->filename; my $was_created_by_proc; if (exists $FILES_CREATED_BY_OBJECT{$$}{$file}) { $was_created_by_proc = 1; delete $FILES_CREATED_BY_OBJECT{$$}{$file}; } if (${*$self}{UNLINK} && !$KEEP_ALL) { print "# ---------> Unlinking $self\n" if $DEBUG; # only delete if this process created it return unless $was_created_by_proc; # The unlink1 may fail if the file has been closed # by the caller. This leaves us with the decision # of whether to refuse to remove the file or simply # do an unlink without test. Seems to be silly # to do this when we are trying to be careful # about security _force_writable( $file ); # for windows unlink1( $self, $file ) or unlink($file); } } #line 1294 sub tempfile { # Can not check for argument count since we can have any # number of args # Default options my %options = ( "DIR" => undef, # Directory prefix "SUFFIX" => '', # Template suffix "UNLINK" => 0, # Do not unlink file on exit "OPEN" => 1, # Open file "TMPDIR" => 0, # Place tempfile in tempdir if template specified "EXLOCK" => 1, # Open file with O_EXLOCK ); # Check to see whether we have an odd or even number of arguments my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef); # Read the options and merge with defaults %options = (%options, @_) if @_; # First decision is whether or not to open the file if (! $options{"OPEN"}) { warn "tempfile(): temporary filename requested but not opened.\nPossibly unsafe, consider using tempfile() with OPEN set to true\n" if $^W; } if ($options{"DIR"} and $^O eq 'VMS') { # on VMS turn []foo into [.foo] for concatenation $options{"DIR"} = VMS::Filespec::vmspath($options{"DIR"}); } # Construct the template # Have a choice of trying to work around the mkstemp/mktemp/tmpnam etc # functions or simply constructing a template and using _gettemp() # explicitly. Go for the latter # First generate a template if not defined and prefix the directory # If no template must prefix the temp directory if (defined $template) { # End up with current directory if neither DIR not TMPDIR are set if ($options{"DIR"}) { $template = File::Spec->catfile($options{"DIR"}, $template); } elsif ($options{TMPDIR}) { $template = File::Spec->catfile(File::Spec->tmpdir, $template ); } } else { if ($options{"DIR"}) { $template = File::Spec->catfile($options{"DIR"}, TEMPXXX); } else { $template = File::Spec->catfile(File::Spec->tmpdir, TEMPXXX); } } # Now add a suffix $template .= $options{"SUFFIX"}; # Determine whether we should tell _gettemp to unlink the file # On unix this is irrelevant and can be worked out after the file is # opened (simply by unlinking the open filehandle). On Windows or VMS # we have to indicate temporary-ness when we open the file. In general # we only want a true temporary file if we are returning just the # filehandle - if the user wants the filename they probably do not # want the file to disappear as soon as they close it (which may be # important if they want a child process to use the file) # For this reason, tie unlink_on_close to the return context regardless # of OS. my $unlink_on_close = ( wantarray ? 0 : 1); # Create the file my ($fh, $path, $errstr); croak "Error in tempfile() using $template: $errstr" unless (($fh, $path) = _gettemp($template, "open" => $options{'OPEN'}, "mkdir"=> 0 , "unlink_on_close" => $unlink_on_close, "suffixlen" => length($options{'SUFFIX'}), "ErrStr" => \$errstr, "use_exlock" => $options{EXLOCK}, ) ); # Set up an exit handler that can do whatever is right for the # system. This removes files at exit when requested explicitly or when # system is asked to unlink_on_close but is unable to do so because # of OS limitations. # The latter should be achieved by using a tied filehandle. # Do not check return status since this is all done with END blocks. _deferred_unlink($fh, $path, 0) if $options{"UNLINK"}; # Return if (wantarray()) { if ($options{'OPEN'}) { return ($fh, $path); } else { return (undef, $path); } } else { # Unlink the file. It is up to unlink0 to decide what to do with # this (whether to unlink now or to defer until later) unlink0($fh, $path) or croak "Error unlinking file $path using unlink0"; # Return just the filehandle. return $fh; } } #line 1483 # ' sub tempdir { # Can not check for argument count since we can have any # number of args # Default options my %options = ( "CLEANUP" => 0, # Remove directory on exit "DIR" => '', # Root directory "TMPDIR" => 0, # Use tempdir with template ); # Check to see whether we have an odd or even number of arguments my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef ); # Read the options and merge with defaults %options = (%options, @_) if @_; # Modify or generate the template # Deal with the DIR and TMPDIR options if (defined $template) { # Need to strip directory path if using DIR or TMPDIR if ($options{'TMPDIR'} || $options{'DIR'}) { # Strip parent directory from the filename # # There is no filename at the end $template = VMS::Filespec::vmspath($template) if $^O eq 'VMS'; my ($volume, $directories, undef) = File::Spec->splitpath( $template, 1); # Last directory is then our template $template = (File::Spec->splitdir($directories))[-1]; # Prepend the supplied directory or temp dir if ($options{"DIR"}) { $template = File::Spec->catdir($options{"DIR"}, $template); } elsif ($options{TMPDIR}) { # Prepend tmpdir $template = File::Spec->catdir(File::Spec->tmpdir, $template); } } } else { if ($options{"DIR"}) { $template = File::Spec->catdir($options{"DIR"}, TEMPXXX); } else { $template = File::Spec->catdir(File::Spec->tmpdir, TEMPXXX); } } # Create the directory my $tempdir; my $suffixlen = 0; if ($^O eq 'VMS') { # dir names can end in delimiters $template =~ m/([\.\]:>]+)$/; $suffixlen = length($1); } if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) { # dir name has a trailing ':' ++$suffixlen; } my $errstr; croak "Error in tempdir() using $template: $errstr" unless ((undef, $tempdir) = _gettemp($template, "open" => 0, "mkdir"=> 1 , "suffixlen" => $suffixlen, "ErrStr" => \$errstr, ) ); # Install exit handler; must be dynamic to get lexical if ( $options{'CLEANUP'} && -d $tempdir) { _deferred_unlink(undef, $tempdir, 1); } # Return the dir name return $tempdir; } #line 1605 sub mkstemp { croak "Usage: mkstemp(template)" if scalar(@_) != 1; my $template = shift; my ($fh, $path, $errstr); croak "Error in mkstemp using $template: $errstr" unless (($fh, $path) = _gettemp($template, "open" => 1, "mkdir"=> 0 , "suffixlen" => 0, "ErrStr" => \$errstr, ) ); if (wantarray()) { return ($fh, $path); } else { return $fh; } } #line 1648 sub mkstemps { croak "Usage: mkstemps(template, suffix)" if scalar(@_) != 2; my $template = shift; my $suffix = shift; $template .= $suffix; my ($fh, $path, $errstr); croak "Error in mkstemps using $template: $errstr" unless (($fh, $path) = _gettemp($template, "open" => 1, "mkdir"=> 0 , "suffixlen" => length($suffix), "ErrStr" => \$errstr, ) ); if (wantarray()) { return ($fh, $path); } else { return $fh; } } #line 1691 #' # for emacs sub mkdtemp { croak "Usage: mkdtemp(template)" if scalar(@_) != 1; my $template = shift; my $suffixlen = 0; if ($^O eq 'VMS') { # dir names can end in delimiters $template =~ m/([\.\]:>]+)$/; $suffixlen = length($1); } if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) { # dir name has a trailing ':' ++$suffixlen; } my ($junk, $tmpdir, $errstr); croak "Error creating temp directory from template $template\: $errstr" unless (($junk, $tmpdir) = _gettemp($template, "open" => 0, "mkdir"=> 1 , "suffixlen" => $suffixlen, "ErrStr" => \$errstr, ) ); return $tmpdir; } #line 1734 sub mktemp { croak "Usage: mktemp(template)" if scalar(@_) != 1; my $template = shift; my ($tmpname, $junk, $errstr); croak "Error getting name to temp file from template $template: $errstr" unless (($junk, $tmpname) = _gettemp($template, "open" => 0, "mkdir"=> 0 , "suffixlen" => 0, "ErrStr" => \$errstr, ) ); return $tmpname; } #line 1796 sub tmpnam { # Retrieve the temporary directory name my $tmpdir = File::Spec->tmpdir; croak "Error temporary directory is not writable" if $tmpdir eq ''; # Use a ten character template and append to tmpdir my $template = File::Spec->catfile($tmpdir, TEMPXXX); if (wantarray() ) { return mkstemp($template); } else { return mktemp($template); } } #line 1832 sub tmpfile { # Simply call tmpnam() in a list context my ($fh, $file) = tmpnam(); # Make sure file is removed when filehandle is closed # This will fail on NFS unlink0($fh, $file) or return undef; return $fh; } #line 1877 sub tempnam { croak 'Usage tempnam($dir, $prefix)' unless scalar(@_) == 2; my ($dir, $prefix) = @_; # Add a string to the prefix $prefix .= 'XXXXXXXX'; # Concatenate the directory to the file my $template = File::Spec->catfile($dir, $prefix); return mktemp($template); } #line 1949 sub unlink0 { croak 'Usage: unlink0(filehandle, filename)' unless scalar(@_) == 2; # Read args my ($fh, $path) = @_; cmpstat($fh, $path) or return 0; # attempt remove the file (does not work on some platforms) if (_can_unlink_opened_file()) { # return early (Without unlink) if we have been instructed to retain files. return 1 if $KEEP_ALL; # XXX: do *not* call this on a directory; possible race # resulting in recursive removal croak "unlink0: $path has become a directory!" if -d $path; unlink($path) or return 0; # Stat the filehandle my @fh = stat $fh; print "Link count = $fh[3] \n" if $DEBUG; # Make sure that the link count is zero # - Cygwin provides deferred unlinking, however, # on Win9x the link count remains 1 # On NFS the link count may still be 1 but we cant know that # we are on NFS return ( $fh[3] == 0 or $^O eq 'cygwin' ? 1 : 0); } else { _deferred_unlink($fh, $path, 0); return 1; } } #line 2014 sub cmpstat { croak 'Usage: cmpstat(filehandle, filename)' unless scalar(@_) == 2; # Read args my ($fh, $path) = @_; warn "Comparing stat\n" if $DEBUG; # Stat the filehandle - which may be closed if someone has manually # closed the file. Can not turn off warnings without using $^W # unless we upgrade to 5.006 minimum requirement my @fh; { local ($^W) = 0; @fh = stat $fh; } return unless @fh; if ($fh[3] > 1 && $^W) { carp "unlink0: fstat found too many links; SB=@fh" if $^W; } # Stat the path my @path = stat $path; unless (@path) { carp "unlink0: $path is gone already" if $^W; return; } # this is no longer a file, but may be a directory, or worse unless (-f $path) { confess "panic: $path is no longer a file: SB=@fh"; } # Do comparison of each member of the array # On WinNT dev and rdev seem to be different # depending on whether it is a file or a handle. # Cannot simply compare all members of the stat return # Select the ones we can use my @okstat = (0..$#fh); # Use all by default if ($^O eq 'MSWin32') { @okstat = (1,2,3,4,5,7,8,9,10); } elsif ($^O eq 'os2') { @okstat = (0, 2..$#fh); } elsif ($^O eq 'VMS') { # device and file ID are sufficient @okstat = (0, 1); } elsif ($^O eq 'dos') { @okstat = (0,2..7,11..$#fh); } elsif ($^O eq 'mpeix') { @okstat = (0..4,8..10); } # Now compare each entry explicitly by number for (@okstat) { print "Comparing: $_ : $fh[$_] and $path[$_]\n" if $DEBUG; # Use eq rather than == since rdev, blksize, and blocks (6, 11, # and 12) will be '' on platforms that do not support them. This # is fine since we are only comparing integers. unless ($fh[$_] eq $path[$_]) { warn "Did not match $_ element of stat\n" if $DEBUG; return 0; } } return 1; } #line 2107 sub unlink1 { croak 'Usage: unlink1(filehandle, filename)' unless scalar(@_) == 2; # Read args my ($fh, $path) = @_; cmpstat($fh, $path) or return 0; # Close the file close( $fh ) or return 0; # Make sure the file is writable (for windows) _force_writable( $path ); # return early (without unlink) if we have been instructed to retain files. return 1 if $KEEP_ALL; # remove the file return unlink($path); } #line 2222 { # protect from using the variable itself my $LEVEL = STANDARD; sub safe_level { my $self = shift; if (@_) { my $level = shift; if (($level != STANDARD) && ($level != MEDIUM) && ($level != HIGH)) { carp "safe_level: Specified level ($level) not STANDARD, MEDIUM or HIGH - ignoring\n" if $^W; } else { # Dont allow this on perl 5.005 or earlier if ($] < 5.006 && $level != STANDARD) { # Cant do MEDIUM or HIGH checks croak "Currently requires perl 5.006 or newer to do the safe checks"; } # Check that we are allowed to change level # Silently ignore if we can not. $LEVEL = $level if _can_do_level($level); } } return $LEVEL; } } #line 2267 { my $TopSystemUID = 10; $TopSystemUID = 197108 if $^O eq 'interix'; # "Administrator" sub top_system_uid { my $self = shift; if (@_) { my $newuid = shift; croak "top_system_uid: UIDs should be numeric" unless $newuid =~ /^\d+$/s; $TopSystemUID = $newuid; } return $TopSystemUID; } } #line 2402 package File::Temp::Dir; use File::Path qw/ rmtree /; use strict; use overload '""' => "STRINGIFY", fallback => 1; # private class specifically to support tempdir objects # created by File::Temp->newdir # ostensibly the same method interface as File::Temp but without # inheriting all the IO::Seekable methods and other cruft # Read-only - returns the name of the temp directory sub dirname { my $self = shift; return $self->{DIRNAME}; } sub STRINGIFY { my $self = shift; return $self->dirname; } sub unlink_on_destroy { my $self = shift; if (@_) { $self->{CLEANUP} = shift; } return $self->{CLEANUP}; } sub DESTROY { my $self = shift; local($., $@, $!, $^E, $?); if ($self->unlink_on_destroy && $$ == $self->{LAUNCHPID} && !$File::Temp::KEEP_ALL) { if (-d $self->{DIRNAME}) { # Some versions of rmtree will abort if you attempt to remove # the directory you are sitting in. We protect that and turn it # into a warning. We do this because this occurs during object # destruction and so can not be caught by the user. eval { rmtree($self->{DIRNAME}, $File::Temp::DEBUG, 0); }; warn $@ if ($@ && $^W); } } } 1; FILEeba7c58a/FileHandle.pmf#line 1 "/usr/share/perl/5.10/FileHandle.pm" package FileHandle; use 5.006; use strict; our($VERSION, @ISA, @EXPORT, @EXPORT_OK); $VERSION = "2.02"; require IO::File; @ISA = qw(IO::File); @EXPORT = qw(_IOFBF _IOLBF _IONBF); @EXPORT_OK = qw( pipe autoflush output_field_separator output_record_separator input_record_separator input_line_number format_page_number format_lines_per_page format_lines_left format_name format_top_name format_line_break_characters format_formfeed print printf getline getlines ); # # Everything we're willing to export, we must first import. # import IO::Handle grep { !defined(&$_) } @EXPORT, @EXPORT_OK; # # Some people call "FileHandle::function", so all the functions # that were in the old FileHandle class must be imported, too. # { no strict 'refs'; my %import = ( 'IO::Handle' => [qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets eof flush error clearerr setbuf setvbuf _open_mode_string)], 'IO::Seekable' => [qw(seek tell getpos setpos)], 'IO::File' => [qw(new new_tmpfile open)] ); for my $pkg (keys %import) { for my $func (@{$import{$pkg}}) { my $c = *{"${pkg}::$func"}{CODE} or die "${pkg}::$func missing"; *$func = $c; } } } # # Specialized importer for Fcntl magic. # sub import { my $pkg = shift; my $callpkg = caller; require Exporter; Exporter::export($pkg, $callpkg, @_); # # If the Fcntl extension is available, # export its constants. # eval { require Fcntl; Exporter::export('Fcntl', $callpkg); }; } ################################################ # This is the only exported function we define; # the rest come from other classes. # sub pipe { my $r = new IO::Handle; my $w = new IO::Handle; CORE::pipe($r, $w) or return undef; ($r, $w); } # Rebless standard file handles bless *STDIN{IO}, "FileHandle" if ref *STDIN{IO} eq "IO::Handle"; bless *STDOUT{IO}, "FileHandle" if ref *STDOUT{IO} eq "IO::Handle"; bless *STDERR{IO}, "FileHandle" if ref *STDERR{IO} eq "IO::Handle"; 1; __END__ FILEb4bc66b5/PerlIO.pm#line 1 "/usr/share/perl/5.10/PerlIO.pm" package PerlIO; our $VERSION = '1.06'; # Map layer name to package that defines it our %alias; sub import { my $class = shift; while (@_) { my $layer = shift; if (exists $alias{$layer}) { $layer = $alias{$layer} } else { $layer = "${class}::$layer"; } eval "require $layer"; warn $@ if $@; } } sub F_UTF8 () { 0x8000 } 1; __END__ #line 345 FILE67a4bcd9/SelectSaver.pm#line 1 "/usr/share/perl/5.10/SelectSaver.pm" package SelectSaver; our $VERSION = '1.02'; require 5.000; use Carp; use Symbol; sub new { @_ >= 1 && @_ <= 2 or croak 'usage: SelectSaver->new( [FILEHANDLE] )'; my $fh = select; my $self = bless \$fh, $_[0]; select qualify($_[1], caller) if @_ > 1; $self; } sub DESTROY { my $self = $_[0]; select $$self; } 1; FILE69091168/Symbol.pm\#line 1 "/usr/share/perl/5.10/Symbol.pm" package Symbol; BEGIN { require 5.005; } require Exporter; @ISA = qw(Exporter); @EXPORT = qw(gensym ungensym qualify qualify_to_ref); @EXPORT_OK = qw(delete_package geniosym); $VERSION = '1.07'; my $genpkg = "Symbol::"; my $genseq = 0; my %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT); # # Note that we never _copy_ the glob; we just make a ref to it. # If we did copy it, then SVf_FAKE would be set on the copy, and # glob-specific behaviors (e.g. C<*$ref = \&func>) wouldn't work. # sub gensym () { my $name = "GEN" . $genseq++; my $ref = \*{$genpkg . $name}; delete $$genpkg{$name}; $ref; } sub geniosym () { my $sym = gensym(); # force the IO slot to be filled select(select $sym); *$sym{IO}; } sub ungensym ($) {} sub qualify ($;$) { my ($name) = @_; if (!ref($name) && index($name, '::') == -1 && index($name, "'") == -1) { my $pkg; # Global names: special character, "^xyz", or other. if ($name =~ /^(([^a-z])|(\^[a-z_]+))\z/i || $global{$name}) { # RGS 2001-11-05 : translate leading ^X to control-char $name =~ s/^\^([a-z_])/'qq(\c'.$1.')'/eei; $pkg = "main"; } else { $pkg = (@_ > 1) ? $_[1] : caller; } $name = $pkg . "::" . $name; } $name; } sub qualify_to_ref ($;$) { return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller }; } # # of Safe.pm lineage # sub delete_package ($) { my $pkg = shift; # expand to full symbol table name if needed unless ($pkg =~ /^main::.*::$/) { $pkg = "main$pkg" if $pkg =~ /^::/; $pkg = "main::$pkg" unless $pkg =~ /^main::/; $pkg .= '::' unless $pkg =~ /::$/; } my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/; my $stem_symtab = *{$stem}{HASH}; return unless defined $stem_symtab and exists $stem_symtab->{$leaf}; # free all the symbols in the package my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH}; foreach my $name (keys %$leaf_symtab) { undef *{$pkg . $name}; } # delete the symbol table %$leaf_symtab = (); delete $stem_symtab->{$leaf}; } 1; FILE!3388fcef/Tie/Hash/NamedCapture.pm$#line 1 "/usr/share/perl/5.10/Tie/Hash/NamedCapture.pm" package Tie::Hash::NamedCapture; our $VERSION = "0.06"; # The real meat implemented in XS in universal.c in the core, but this # method was left behind because gv.c expects a Purl-Perl method in # this package when it loads the tie magic for %+ and %- my ($one, $all) = Tie::Hash::NamedCapture::flags(); sub TIEHASH { my ($pkg, %arg) = @_; my $flag = $arg{all} ? $all : $one; bless \$flag => $pkg; } tie %+, __PACKAGE__; tie %-, __PACKAGE__, all => 1; 1; __END__ #line 63 FILE0e29ec40/Time/Local.pm#line 1 "/usr/share/perl/5.10/Time/Local.pm" package Time::Local; require Exporter; use Carp; use Config; use strict; use integer; use vars qw( $VERSION @ISA @EXPORT @EXPORT_OK ); $VERSION = '1.1901'; @ISA = qw( Exporter ); @EXPORT = qw( timegm timelocal ); @EXPORT_OK = qw( timegm_nocheck timelocal_nocheck ); my @MonthDays = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); # Determine breakpoint for rolling century my $ThisYear = ( localtime() )[5]; my $Breakpoint = ( $ThisYear + 50 ) % 100; my $NextCentury = $ThisYear - $ThisYear % 100; $NextCentury += 100 if $Breakpoint < 50; my $Century = $NextCentury - 100; my $SecOff = 0; my ( %Options, %Cheat ); use constant SECS_PER_MINUTE => 60; use constant SECS_PER_HOUR => 3600; use constant SECS_PER_DAY => 86400; my $MaxInt; if ( $^O eq 'MacOS' ) { # time_t is unsigned... $MaxInt = ( 1 << ( 8 * $Config{ivsize} ) ) - 1; } else { $MaxInt = ( ( 1 << ( 8 * $Config{ivsize} - 2 ) ) - 1 ) * 2 + 1; } my $MaxDay = int( ( $MaxInt - ( SECS_PER_DAY / 2 ) ) / SECS_PER_DAY ) - 1; # Determine the EPOC day for this machine my $Epoc = 0; if ( $^O eq 'vos' ) { # work around posix-977 -- VOS doesn't handle dates in the range # 1970-1980. $Epoc = _daygm( 0, 0, 0, 1, 0, 70, 4, 0 ); } elsif ( $^O eq 'MacOS' ) { $MaxDay *=2 if $^O eq 'MacOS'; # time_t unsigned ... quick hack? # MacOS time() is seconds since 1 Jan 1904, localtime # so we need to calculate an offset to apply later $Epoc = 693901; $SecOff = timelocal( localtime(0)) - timelocal( gmtime(0) ) ; $Epoc += _daygm( gmtime(0) ); } else { $Epoc = _daygm( gmtime(0) ); } %Cheat = (); # clear the cache as epoc has changed sub _daygm { # This is written in such a byzantine way in order to avoid # lexical variables and sub calls, for speed return $_[3] + ( $Cheat{ pack( 'ss', @_[ 4, 5 ] ) } ||= do { my $month = ( $_[4] + 10 ) % 12; my $year = ( $_[5] + 1900 ) - ( $month / 10 ); ( ( 365 * $year ) + ( $year / 4 ) - ( $year / 100 ) + ( $year / 400 ) + ( ( ( $month * 306 ) + 5 ) / 10 ) ) - $Epoc; } ); } sub _timegm { my $sec = $SecOff + $_[0] + ( SECS_PER_MINUTE * $_[1] ) + ( SECS_PER_HOUR * $_[2] ); return $sec + ( SECS_PER_DAY * &_daygm ); } sub timegm { my ( $sec, $min, $hour, $mday, $month, $year ) = @_; if ( $year >= 1000 ) { $year -= 1900; } elsif ( $year < 100 and $year >= 0 ) { $year += ( $year > $Breakpoint ) ? $Century : $NextCentury; } unless ( $Options{no_range_check} ) { croak "Month '$month' out of range 0..11" if $month > 11 or $month < 0; my $md = $MonthDays[$month]; ++$md if $month == 1 && _is_leap_year( $year + 1900 ); croak "Day '$mday' out of range 1..$md" if $mday > $md or $mday < 1; croak "Hour '$hour' out of range 0..23" if $hour > 23 or $hour < 0; croak "Minute '$min' out of range 0..59" if $min > 59 or $min < 0; croak "Second '$sec' out of range 0..59" if $sec > 59 or $sec < 0; } my $days = _daygm( undef, undef, undef, $mday, $month, $year ); unless ($Options{no_range_check} or abs($days) < $MaxDay) { my $msg = ''; $msg .= "Day too big - $days > $MaxDay\n" if $days > $MaxDay; $year += 1900; $msg .= "Cannot handle date ($sec, $min, $hour, $mday, $month, $year)"; croak $msg; } return $sec + $SecOff + ( SECS_PER_MINUTE * $min ) + ( SECS_PER_HOUR * $hour ) + ( SECS_PER_DAY * $days ); } sub _is_leap_year { return 0 if $_[0] % 4; return 1 if $_[0] % 100; return 0 if $_[0] % 400; return 1; } sub timegm_nocheck { local $Options{no_range_check} = 1; return &timegm; } sub timelocal { my $ref_t = &timegm; my $loc_for_ref_t = _timegm( localtime($ref_t) ); my $zone_off = $loc_for_ref_t - $ref_t or return $loc_for_ref_t; # Adjust for timezone my $loc_t = $ref_t - $zone_off; # Are we close to a DST change or are we done my $dst_off = $ref_t - _timegm( localtime($loc_t) ); # If this evaluates to true, it means that the value in $loc_t is # the _second_ hour after a DST change where the local time moves # backward. if ( ! $dst_off && ( ( $ref_t - SECS_PER_HOUR ) - _timegm( localtime( $loc_t - SECS_PER_HOUR ) ) < 0 ) ) { return $loc_t - SECS_PER_HOUR; } # Adjust for DST change $loc_t += $dst_off; return $loc_t if $dst_off > 0; # If the original date was a non-extent gap in a forward DST jump, # we should now have the wrong answer - undo the DST adjustment my ( $s, $m, $h ) = localtime($loc_t); $loc_t -= $dst_off if $s != $_[0] || $m != $_[1] || $h != $_[2]; return $loc_t; } sub timelocal_nocheck { local $Options{no_range_check} = 1; return &timelocal; } 1; __END__ #line 372 FILEa34e7324/UNIVERSAL.pm#line 1 "/usr/share/perl/5.10/UNIVERSAL.pm" package UNIVERSAL; our $VERSION = '1.05'; # UNIVERSAL should not contain any extra subs/methods beyond those # that it exists to define. The use of Exporter below is a historical # accident that can't be fixed without breaking code. Note that we # *don't* set @ISA here, as we don't want all classes/objects inheriting from # Exporter. It's bad enough that all classes have a import() method # whenever UNIVERSAL.pm is loaded. require Exporter; @EXPORT_OK = qw(isa can VERSION); # Make sure that even though the import method is called, it doesn't do # anything unless called on UNIVERSAL. sub import { return unless $_[0] eq __PACKAGE__; goto &Exporter::import; } 1; __END__ #line 206 FILEa1d4f9a7/attributes.pm#line 1 "/usr/share/perl/5.10/attributes.pm" package attributes; our $VERSION = 0.09; @EXPORT_OK = qw(get reftype); @EXPORT = (); %EXPORT_TAGS = (ALL => [@EXPORT, @EXPORT_OK]); use strict; sub croak { require Carp; goto &Carp::croak; } sub carp { require Carp; goto &Carp::carp; } ## forward declaration(s) rather than wrapping the bootstrap call in BEGIN{} #sub reftype ($) ; #sub _fetch_attrs ($) ; #sub _guess_stash ($) ; #sub _modify_attrs ; # # The extra trips through newATTRSUB in the interpreter wipe out any savings # from avoiding the BEGIN block. Just do the bootstrap now. BEGIN { bootstrap attributes } sub import { @_ > 2 && ref $_[2] or do { require Exporter; goto &Exporter::import; }; my (undef,$home_stash,$svref,@attrs) = @_; my $svtype = uc reftype($svref); my $pkgmeth; $pkgmeth = UNIVERSAL::can($home_stash, "MODIFY_${svtype}_ATTRIBUTES") if defined $home_stash && $home_stash ne ''; my @badattrs; if ($pkgmeth) { my @pkgattrs = _modify_attrs($svref, @attrs); @badattrs = $pkgmeth->($home_stash, $svref, @pkgattrs); if (!@badattrs && @pkgattrs) { require warnings; return unless warnings::enabled('reserved'); @pkgattrs = grep { m/\A[[:lower:]]+(?:\z|\()/ } @pkgattrs; if (@pkgattrs) { for my $attr (@pkgattrs) { $attr =~ s/\(.+\z//s; } my $s = ((@pkgattrs == 1) ? '' : 's'); carp "$svtype package attribute$s " . "may clash with future reserved word$s: " . join(' : ' , @pkgattrs); } } } else { @badattrs = _modify_attrs($svref, @attrs); } if (@badattrs) { croak "Invalid $svtype attribute" . (( @badattrs == 1 ) ? '' : 's') . ": " . join(' : ', @badattrs); } } sub get ($) { @_ == 1 && ref $_[0] or croak 'Usage: '.__PACKAGE__.'::get $ref'; my $svref = shift; my $svtype = uc reftype $svref; my $stash = _guess_stash $svref; $stash = caller unless defined $stash; my $pkgmeth; $pkgmeth = UNIVERSAL::can($stash, "FETCH_${svtype}_ATTRIBUTES") if defined $stash && $stash ne ''; return $pkgmeth ? (_fetch_attrs($svref), $pkgmeth->($stash, $svref)) : (_fetch_attrs($svref)) ; } sub require_version { goto &UNIVERSAL::VERSION } 1; __END__ #The POD goes here FILEee72f127/base.pm;#line 1 "/usr/share/perl/5.10/base.pm" package base; use strict 'vars'; use vars qw($VERSION); $VERSION = '2.14'; $VERSION = eval $VERSION; # constant.pm is slow sub SUCCESS () { 1 } sub PUBLIC () { 2**0 } sub PRIVATE () { 2**1 } sub INHERITED () { 2**2 } sub PROTECTED () { 2**3 } my $Fattr = \%fields::attr; sub has_fields { my($base) = shift; my $fglob = ${"$base\::"}{FIELDS}; return( ($fglob && 'GLOB' eq ref($fglob) && *$fglob{HASH}) ? 1 : 0 ); } sub has_version { my($base) = shift; my $vglob = ${$base.'::'}{VERSION}; return( ($vglob && *$vglob{SCALAR}) ? 1 : 0 ); } sub has_attr { my($proto) = shift; my($class) = ref $proto || $proto; return exists $Fattr->{$class}; } sub get_attr { $Fattr->{$_[0]} = [1] unless $Fattr->{$_[0]}; return $Fattr->{$_[0]}; } if ($] < 5.009) { *get_fields = sub { # Shut up a possible typo warning. () = \%{$_[0].'::FIELDS'}; my $f = \%{$_[0].'::FIELDS'}; # should be centralized in fields? perhaps # fields::mk_FIELDS_be_OK. Peh. As long as %{ $package . '::FIELDS' } # is used here anyway, it doesn't matter. bless $f, 'pseudohash' if (ref($f) ne 'pseudohash'); return $f; } } else { *get_fields = sub { # Shut up a possible typo warning. () = \%{$_[0].'::FIELDS'}; return \%{$_[0].'::FIELDS'}; } } sub import { my $class = shift; return SUCCESS unless @_; # List of base classes from which we will inherit %FIELDS. my $fields_base; my $inheritor = caller(0); my @isa_classes; my @bases; foreach my $base (@_) { if ( $inheritor eq $base ) { warn "Class '$inheritor' tried to inherit from itself\n"; } next if grep $_->isa($base), ($inheritor, @bases); if (has_version($base)) { ${$base.'::VERSION'} = '-1, set by base.pm' unless defined ${$base.'::VERSION'}; } else { my $sigdie; { local $SIG{__DIE__}; eval "require $base"; # Only ignore "Can't locate" errors from our eval require. # Other fatal errors (syntax etc) must be reported. die if $@ && $@ !~ /^Can't locate .*? at \(eval /; unless (%{"$base\::"}) { require Carp; local $" = " "; Carp::croak(<[0] = @$battr; if( keys %$dfields ) { warn <<"END"; $derived is inheriting from $base but already has its own fields! This will cause problems. Be sure you use base BEFORE declaring fields. END } # Iterate through the base's fields adding all the non-private # ones to the derived class. Hang on to the original attribute # (Public, Private, etc...) and add Inherited. # This is all too complicated to do efficiently with add_fields(). while (my($k,$v) = each %$bfields) { my $fno; if ($fno = $dfields->{$k} and $fno != $v) { require Carp; Carp::croak ("Inherited fields can't override existing fields"); } if( $battr->[$v] & PRIVATE ) { $dattr->[$v] = PRIVATE | INHERITED; } else { $dattr->[$v] = INHERITED | $battr->[$v]; $dfields->{$k} = $v; } } foreach my $idx (1..$#{$battr}) { next if defined $dattr->[$idx]; $dattr->[$idx] = $battr->[$idx] & INHERITED; } } 1; __END__ FILEcda73928/bytes.pm#line 1 "/usr/share/perl/5.10/bytes.pm" package bytes; our $VERSION = '1.03'; $bytes::hint_bits = 0x00000008; sub import { $^H |= $bytes::hint_bits; } sub unimport { $^H &= ~$bytes::hint_bits; } sub AUTOLOAD { require "bytes_heavy.pl"; goto &$AUTOLOAD if defined &$AUTOLOAD; require Carp; Carp::croak("Undefined subroutine $AUTOLOAD called"); } sub length (_); sub chr (_); sub ord (_); sub substr ($$;$$); sub index ($$;$); sub rindex ($$;$); 1; __END__ FILE66c7460d/constant.pm-#line 1 "/usr/share/perl/5.10/constant.pm" package constant; use 5.005; use strict; use warnings::register; use vars qw($VERSION %declared); $VERSION = '1.17'; #======================================================================= # Some names are evil choices. my %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD }; $keywords{UNITCHECK}++ if $] > 5.009; my %forced_into_main = map +($_, 1), qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG }; my %forbidden = (%keywords, %forced_into_main); #======================================================================= # import() - import symbols into user's namespace # # What we actually do is define a function in the caller's namespace # which returns the value. The function we create will normally # be inlined as a constant, thereby avoiding further sub calling # overhead. #======================================================================= sub import { my $class = shift; return unless @_; # Ignore 'use constant;' my $constants; my $multiple = ref $_[0]; my $pkg = caller; my $symtab; my $str_end = $] >= 5.006 ? "\\z" : "\\Z"; if ($] > 5.009002) { no strict 'refs'; $symtab = \%{$pkg . '::'}; }; if ( $multiple ) { if (ref $_[0] ne 'HASH') { require Carp; Carp::croak("Invalid reference type '".ref(shift)."' not 'HASH'"); } $constants = shift; } else { $constants->{+shift} = undef; } foreach my $name ( keys %$constants ) { unless (defined $name) { require Carp; Carp::croak("Can't use undef as constant name"); } # Normal constant name if ($name =~ /^_?[^\W_0-9]\w*$str_end/ and !$forbidden{$name}) { # Everything is okay # Name forced into main, but we're not in main. Fatal. } elsif ($forced_into_main{$name} and $pkg ne 'main') { require Carp; Carp::croak("Constant name '$name' is forced into main::"); # Starts with double underscore. Fatal. } elsif ($name =~ /^__/) { require Carp; Carp::croak("Constant name '$name' begins with '__'"); # Maybe the name is tolerable } elsif ($name =~ /^[A-Za-z_]\w*$str_end/) { # Then we'll warn only if you've asked for warnings if (warnings::enabled()) { if ($keywords{$name}) { warnings::warn("Constant name '$name' is a Perl keyword"); } elsif ($forced_into_main{$name}) { warnings::warn("Constant name '$name' is " . "forced into package main::"); } } # Looks like a boolean # use constant FRED == fred; } elsif ($name =~ /^[01]?$str_end/) { require Carp; if (@_) { Carp::croak("Constant name '$name' is invalid"); } else { Carp::croak("Constant name looks like boolean value"); } } else { # Must have bad characters require Carp; Carp::croak("Constant name '$name' has invalid characters"); } { no strict 'refs'; my $full_name = "${pkg}::$name"; $declared{$full_name}++; if ($multiple || @_ == 1) { my $scalar = $multiple ? $constants->{$name} : $_[0]; if ($symtab && !exists $symtab->{$name}) { # No typeglob yet, so we can use a reference as space- # efficient proxy for a constant subroutine # The check in Perl_ck_rvconst knows that inlinable # constants from cv_const_sv are read only. So we have to: Internals::SvREADONLY($scalar, 1); $symtab->{$name} = \$scalar; mro::method_changed_in($pkg); } else { *$full_name = sub () { $scalar }; } } elsif (@_) { my @list = @_; *$full_name = sub () { @list }; } else { *$full_name = sub () { }; } } } } 1; __END__ FILE40f009b5/integer.pm#line 1 "/usr/share/perl/5.10/integer.pm" package integer; our $VERSION = '1.00'; $integer::hint_bits = 0x1; sub import { $^H |= $integer::hint_bits; } sub unimport { $^H &= ~$integer::hint_bits; } 1; FILE5e7d7e0b/overload.pmJ#line 1 "/usr/share/perl/5.10/overload.pm" package overload; our $VERSION = '1.07'; sub nil {} sub OVERLOAD { $package = shift; my %arg = @_; my ($sub, $fb); $ {$package . "::OVERLOAD"}{dummy}++; # Register with magic by touching. *{$package . "::()"} = \&nil; # Make it findable via fetchmethod. for (keys %arg) { if ($_ eq 'fallback') { $fb = $arg{$_}; } else { $sub = $arg{$_}; if (not ref $sub and $sub !~ /::/) { $ {$package . "::(" . $_} = $sub; $sub = \&nil; } #print STDERR "Setting `$ {'package'}::\cO$_' to \\&`$sub'.\n"; *{$package . "::(" . $_} = \&{ $sub }; } } ${$package . "::()"} = $fb; # Make it findable too (fallback only). } sub import { $package = (caller())[0]; # *{$package . "::OVERLOAD"} = \&OVERLOAD; shift; $package->overload::OVERLOAD(@_); } sub unimport { $package = (caller())[0]; ${$package . "::OVERLOAD"}{dummy}++; # Upgrade the table shift; for (@_) { if ($_ eq 'fallback') { undef $ {$package . "::()"}; } else { delete $ {$package . "::"}{"(" . $_}; } } } sub Overloaded { my $package = shift; $package = ref $package if ref $package; $package->can('()'); } sub ov_method { my $globref = shift; return undef unless $globref; my $sub = \&{*$globref}; return $sub if $sub ne \&nil; return shift->can($ {*$globref}); } sub OverloadedStringify { my $package = shift; $package = ref $package if ref $package; #$package->can('(""') ov_method mycan($package, '(""'), $package or ov_method mycan($package, '(0+'), $package or ov_method mycan($package, '(bool'), $package or ov_method mycan($package, '(nomethod'), $package; } sub Method { my $package = shift; if(ref $package) { local $@; local $!; require Scalar::Util; $package = Scalar::Util::blessed($package); return undef if !defined $package; } #my $meth = $package->can('(' . shift); ov_method mycan($package, '(' . shift), $package; #return $meth if $meth ne \&nil; #return $ {*{$meth}}; } sub AddrRef { my $package = ref $_[0]; return "$_[0]" unless $package; local $@; local $!; require Scalar::Util; my $class = Scalar::Util::blessed($_[0]); my $class_prefix = defined($class) ? "$class=" : ""; my $type = Scalar::Util::reftype($_[0]); my $addr = Scalar::Util::refaddr($_[0]); return sprintf("$class_prefix$type(0x%x)", $addr); } *StrVal = *AddrRef; sub mycan { # Real can would leave stubs. my ($package, $meth) = @_; my $mro = mro::get_linear_isa($package); foreach my $p (@$mro) { my $fqmeth = $p . q{::} . $meth; return \*{$fqmeth} if defined &{$fqmeth}; } return undef; } %constants = ( 'integer' => 0x1000, # HINT_NEW_INTEGER 'float' => 0x2000, # HINT_NEW_FLOAT 'binary' => 0x4000, # HINT_NEW_BINARY 'q' => 0x8000, # HINT_NEW_STRING 'qr' => 0x10000, # HINT_NEW_RE ); %ops = ( with_assign => "+ - * / % ** << >> x .", assign => "+= -= *= /= %= **= <<= >>= x= .=", num_comparison => "< <= > >= == !=", '3way_comparison'=> "<=> cmp", str_comparison => "lt le gt ge eq ne", binary => '& &= | |= ^ ^=', unary => "neg ! ~", mutators => '++ --', func => "atan2 cos sin exp abs log sqrt int", conversion => 'bool "" 0+', iterators => '<>', dereferencing => '${} @{} %{} &{} *{}', matching => '~~', special => 'nomethod fallback ='); use warnings::register; sub constant { # Arguments: what, sub while (@_) { if (@_ == 1) { warnings::warnif ("Odd number of arguments for overload::constant"); last; } elsif (!exists $constants {$_ [0]}) { warnings::warnif ("`$_[0]' is not an overloadable type"); } elsif (!ref $_ [1] || "$_[1]" !~ /(^|=)CODE\(0x[0-9a-f]+\)$/) { # Can't use C above as code references can be # blessed, and C would return the package the ref is blessed into. if (warnings::enabled) { $_ [1] = "undef" unless defined $_ [1]; warnings::warn ("`$_[1]' is not a code reference"); } } else { $^H{$_[0]} = $_[1]; $^H |= $constants{$_[0]}; } shift, shift; } } sub remove_constant { # Arguments: what, sub while (@_) { delete $^H{$_[0]}; $^H &= ~ $constants{$_[0]}; shift, shift; } } 1; __END__ FILEfb69db1c/strict.pm#line 1 "/usr/share/perl/5.10/strict.pm" package strict; $strict::VERSION = "1.04"; # Verify that we're called correctly so that strictures will work. unless ( __FILE__ =~ /(^|[\/\\])\Q${\__PACKAGE__}\E\.pmc?$/ ) { # Can't use Carp, since Carp uses us! my (undef, $f, $l) = caller; die("Incorrect use of pragma '${\__PACKAGE__}' at $f line $l.\n"); } my %bitmask = ( refs => 0x00000002, subs => 0x00000200, vars => 0x00000400 ); sub bits { my $bits = 0; my @wrong; foreach my $s (@_) { push @wrong, $s unless exists $bitmask{$s}; $bits |= $bitmask{$s} || 0; } if (@wrong) { require Carp; Carp::croak("Unknown 'strict' tag(s) '@wrong'"); } $bits; } my $default_bits = bits(qw(refs subs vars)); sub import { shift; $^H |= @_ ? bits(@_) : $default_bits; } sub unimport { shift; $^H &= ~ (@_ ? bits(@_) : $default_bits); } 1; __END__ FILE8bcef401/utf8.pm#line 1 "/usr/share/perl/5.10/utf8.pm" package utf8; $utf8::hint_bits = 0x00800000; our $VERSION = '1.07'; sub import { $^H |= $utf8::hint_bits; $enc{caller()} = $_[1] if $_[1]; } sub unimport { $^H &= ~$utf8::hint_bits; } sub AUTOLOAD { require "utf8_heavy.pl"; goto &$AUTOLOAD if defined &$AUTOLOAD; require Carp; Carp::croak("Undefined subroutine $AUTOLOAD called"); } 1; __END__ FILE49414377/vars.pm#line 1 "/usr/share/perl/5.10/vars.pm" package vars; use 5.006; our $VERSION = '1.01'; use warnings::register; use strict qw(vars subs); sub import { my $callpack = caller; my ($pack, @imports) = @_; my ($sym, $ch); foreach (@imports) { if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) { if ($sym =~ /\W/) { # time for a more-detailed check-up if ($sym =~ /^\w+[[{].*[]}]$/) { require Carp; Carp::croak("Can't declare individual elements of hash or array"); } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) { warnings::warn("No need to declare built-in vars"); } elsif (($^H &= strict::bits('vars'))) { require Carp; Carp::croak("'$_' is not a valid variable name under strict vars"); } } $sym = "${callpack}::$sym" unless $sym =~ /::/; *$sym = ( $ch eq "\$" ? \$$sym : $ch eq "\@" ? \@$sym : $ch eq "\%" ? \%$sym : $ch eq "\*" ? \*$sym : $ch eq "\&" ? \&$sym : do { require Carp; Carp::croak("'$_' is not a valid variable name"); }); } else { require Carp; Carp::croak("'$_' is not a valid variable name"); } } }; 1; __END__ FILE2479f5b2/warnings.pm4#line 1 "/usr/share/perl/5.10/warnings.pm" # -*- buffer-read-only: t -*- # !!!!!!! DO NOT EDIT THIS FILE !!!!!!! # This file was created by warnings.pl # Any changes made here will be lost. # package warnings; our $VERSION = '1.06'; # Verify that we're called correctly so that warnings will work. # see also strict.pm. unless ( __FILE__ =~ /(^|[\/\\])\Q${\__PACKAGE__}\E\.pmc?$/ ) { my (undef, $f, $l) = caller; die("Incorrect use of pragma '${\__PACKAGE__}' at $f line $l.\n"); } our %Offsets = ( # Warnings Categories added in Perl 5.008 'all' => 0, 'closure' => 2, 'deprecated' => 4, 'exiting' => 6, 'glob' => 8, 'io' => 10, 'closed' => 12, 'exec' => 14, 'layer' => 16, 'newline' => 18, 'pipe' => 20, 'unopened' => 22, 'misc' => 24, 'numeric' => 26, 'once' => 28, 'overflow' => 30, 'pack' => 32, 'portable' => 34, 'recursion' => 36, 'redefine' => 38, 'regexp' => 40, 'severe' => 42, 'debugging' => 44, 'inplace' => 46, 'internal' => 48, 'malloc' => 50, 'signal' => 52, 'substr' => 54, 'syntax' => 56, 'ambiguous' => 58, 'bareword' => 60, 'digit' => 62, 'parenthesis' => 64, 'precedence' => 66, 'printf' => 68, 'prototype' => 70, 'qw' => 72, 'reserved' => 74, 'semicolon' => 76, 'taint' => 78, 'threads' => 80, 'uninitialized' => 82, 'unpack' => 84, 'untie' => 86, 'utf8' => 88, 'void' => 90, ); our %Bits = ( 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x05", # [0..45] 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [29] 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [30] 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6] 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1] 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [22] 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2] 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [31] 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4] 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [23] 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [24] 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11] 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8] 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [25] 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [12] 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9] 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [13] 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [14] 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [15] 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [16] 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [32] 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10] 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [17] 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [33] 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [34] 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [35] 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [36] 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [18] 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [19] 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [20] 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [37] 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [38] 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00", # [21..25] 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [26] 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [27] 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x00", # [28..38] 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [39] 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [40] 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [41] 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11] 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [42] 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [43] 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [44] 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [45] ); our %DeadBits = ( 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x0a", # [0..45] 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [29] 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [30] 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6] 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1] 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [22] 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2] 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [31] 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4] 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [23] 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [24] 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11] 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8] 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [25] 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [12] 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9] 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [13] 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [14] 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [15] 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [16] 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [32] 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10] 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [17] 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [33] 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [34] 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [35] 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [36] 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [18] 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [19] 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [20] 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [37] 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [38] 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00", # [21..25] 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [26] 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [27] 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x00", # [28..38] 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [39] 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [40] 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [41] 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11] 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [42] 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [43] 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [44] 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [45] ); $NONE = "\0\0\0\0\0\0\0\0\0\0\0\0"; $LAST_BIT = 92 ; $BYTES = 12 ; $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ; sub Croaker { require Carp::Heavy; # this initializes %CarpInternal local $Carp::CarpInternal{'warnings'}; delete $Carp::CarpInternal{'warnings'}; Carp::croak(@_); } sub bits { # called from B::Deparse.pm push @_, 'all' unless @_; my $mask; my $catmask ; my $fatal = 0 ; my $no_fatal = 0 ; foreach my $word ( @_ ) { if ($word eq 'FATAL') { $fatal = 1; $no_fatal = 0; } elsif ($word eq 'NONFATAL') { $fatal = 0; $no_fatal = 1; } elsif ($catmask = $Bits{$word}) { $mask |= $catmask ; $mask |= $DeadBits{$word} if $fatal ; $mask &= ~($DeadBits{$word}|$All) if $no_fatal ; } else { Croaker("Unknown warnings category '$word'")} } return $mask ; } sub import { shift; my $catmask ; my $fatal = 0 ; my $no_fatal = 0 ; my $mask = ${^WARNING_BITS} ; if (vec($mask, $Offsets{'all'}, 1)) { $mask |= $Bits{'all'} ; $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1); } push @_, 'all' unless @_; foreach my $word ( @_ ) { if ($word eq 'FATAL') { $fatal = 1; $no_fatal = 0; } elsif ($word eq 'NONFATAL') { $fatal = 0; $no_fatal = 1; } elsif ($catmask = $Bits{$word}) { $mask |= $catmask ; $mask |= $DeadBits{$word} if $fatal ; $mask &= ~($DeadBits{$word}|$All) if $no_fatal ; } else { Croaker("Unknown warnings category '$word'")} } ${^WARNING_BITS} = $mask ; } sub unimport { shift; my $catmask ; my $mask = ${^WARNING_BITS} ; if (vec($mask, $Offsets{'all'}, 1)) { $mask |= $Bits{'all'} ; $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1); } push @_, 'all' unless @_; foreach my $word ( @_ ) { if ($word eq 'FATAL') { next; } elsif ($catmask = $Bits{$word}) { $mask &= ~($catmask | $DeadBits{$word} | $All); } else { Croaker("Unknown warnings category '$word'")} } ${^WARNING_BITS} = $mask ; } my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = (); sub __chk { my $category ; my $offset ; my $isobj = 0 ; if (@_) { # check the category supplied. $category = shift ; if (my $type = ref $category) { Croaker("not an object") if exists $builtin_type{$type}; $category = $type; $isobj = 1 ; } $offset = $Offsets{$category}; Croaker("Unknown warnings category '$category'") unless defined $offset; } else { $category = (caller(1))[0] ; $offset = $Offsets{$category}; Croaker("package '$category' not registered for warnings") unless defined $offset ; } my $this_pkg = (caller(1))[0] ; my $i = 2 ; my $pkg ; if ($isobj) { while (do { { package DB; $pkg = (caller($i++))[0] } } ) { last unless @DB::args && $DB::args[0] =~ /^$category=/ ; } $i -= 2 ; } else { $i = _error_loc(); # see where Carp will allocate the error } my $callers_bitmask = (caller($i))[9] ; return ($callers_bitmask, $offset, $i) ; } sub _error_loc { require Carp::Heavy; goto &Carp::short_error_loc; # don't introduce another stack frame } sub enabled { Croaker("Usage: warnings::enabled([category])") unless @_ == 1 || @_ == 0 ; my ($callers_bitmask, $offset, $i) = __chk(@_) ; return 0 unless defined $callers_bitmask ; return vec($callers_bitmask, $offset, 1) || vec($callers_bitmask, $Offsets{'all'}, 1) ; } sub warn { Croaker("Usage: warnings::warn([category,] 'message')") unless @_ == 2 || @_ == 1 ; my $message = pop ; my ($callers_bitmask, $offset, $i) = __chk(@_) ; require Carp; Carp::croak($message) if vec($callers_bitmask, $offset+1, 1) || vec($callers_bitmask, $Offsets{'all'}+1, 1) ; Carp::carp($message) ; } sub warnif { Croaker("Usage: warnings::warnif([category,] 'message')") unless @_ == 2 || @_ == 1 ; my $message = pop ; my ($callers_bitmask, $offset, $i) = __chk(@_) ; return unless defined $callers_bitmask && (vec($callers_bitmask, $offset, 1) || vec($callers_bitmask, $Offsets{'all'}, 1)) ; require Carp; Carp::croak($message) if vec($callers_bitmask, $offset+1, 1) || vec($callers_bitmask, $Offsets{'all'}+1, 1) ; Carp::carp($message) ; } 1; # ex: set ro: FILE4a3e8cbf/warnings/register.pm#line 1 "/usr/share/perl/5.10/warnings/register.pm" package warnings::register; our $VERSION = '1.01'; require warnings; sub mkMask { my ($bit) = @_; my $mask = ""; vec($mask, $bit, 1) = 1; return $mask; } sub import { shift; my $package = (caller(0))[0]; if (! defined $warnings::Bits{$package}) { $warnings::Bits{$package} = mkMask($warnings::LAST_BIT); vec($warnings::Bits{'all'}, $warnings::LAST_BIT, 1) = 1; $warnings::Offsets{$package} = $warnings::LAST_BIT ++; foreach my $k (keys %warnings::Bits) { vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1) = 0; } $warnings::DeadBits{$package} = mkMask($warnings::LAST_BIT); vec($warnings::DeadBits{'all'}, $warnings::LAST_BIT++, 1) = 1; } } 1; FILE093cca23/auto/Fcntl/Fcntl.so5ELFP4x14 (h h ,),9,9`h/??$$QtdRtd,),9,9GNUt 9(CU5m%+ #!&)  '"$(*   %$ H $'*TU|CE.6bxqX??| + kW/9rZMKg$b'" U @@ @  H __gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesPerl_get_hvPerl_hv_common_key_lenPerl_newSV_typePerl_sv_upgradeboot_FcntlPerl_Istack_sp_ptrPerl_Imarkstack_ptr_ptrPerl_Istack_base_ptrPerl_newSVpvPerl_new_versionPerl_sv_derived_fromPerl_vcmpXS_Fcntl_constantPerl_newXSPerl_Gthr_key_ptrpthread_getspecificPerl_newSVivPerl_newCONSTSUBPerl_Isv_yes_ptrPerl_Isub_generation_ptrPerl_Iunitcheckav_ptrPerl_Iscopestack_ix_ptrPerl_call_listPerl_sv_free2Perl_sv_setpvnPerl_sv_freePerl_formPerl_get_svPerl_sv_2pv_flagsPerl_croakPerl_vstringifyPerl_newSVpvf_nocontextPerl_sv_2mortalPerl_croak_xs_usagelibc.so.6_edata__bss_start_endGLIBC_2.1.3{si @9L9X9d9p9|99999999999: ::$:0:<:H:T:`:l:x::::::::::::;; ;,;8;D;P;\;h;t;;;;;;;;;;;;<<<(<4<@<L<X<d<p<|<<<<<<<<<<<= ==$=0=<=H=T=`=l=x============>>>> >(>0>8>@>H>P>X>`>h>p>x>>>>>>>>>>>>>>>>>??@???$?"@@@ @@@@@ @ $@ (@ ,@ 0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@ |@!@"@#US[2t~ X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhUVSÚ/u]t$D@)9s @9rƃ[^]US./Htt H$Ѓ[]Ë$ÐUH].}ljuD$<$pD$lD$D$D$0D$ T$D$<$ 1t @ t@ ]u}]Ít&D$ <$HzvB JfT$ED$<$9Eҍv'UWVS -lE$U$E9:Mw $bEE$RUЋ@ M $.@ E܋M})ǃ?E$tEtjD$ED$$U$D$Mt$ $ǍD$,U|$t$$MD$ $D$D$$$D$ƍD$4$ELELN^n~.>N^n~.>@Fcntl.soi.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.data.rel.ro.dynamic.got.got.plt.data.bss.gnu_debuglink $"Ho``@( 0PP8oVEoPP T pph]   f 0a0lPP rHHx2ddd d ,9,)494)<9<)@9@) ?/?/?/@0@000FILE429fcfc9/auto/File/Glob/Glob.soUELF4Q4 (@@@@O__ O__$$QtdRtdO__GNU@e|<#uTCJ 9?),B:6!>2@E"A*=3';57D1H ./+-8(&4  F  %0#$IGC<@ @ @CFs*|CEqXB^%@: ^qa % b{:@)Wg 3{g,oQlNF5U#"2F = a*a1a9p K > 8 Ep,0 <+" __gmon_start___fini__cxa_finalize_Jv_RegisterClassesbsd_globfreePerl_safesysfree__lxstat64__xstat64__ctype_tolower_locreaddir64Perl_safesysreallocPerl_safesysmallocsysconf__errno_locationPL_memory_wrapPerl_croak_nocontextclosedirPerl_my_strlcpyopendirstrcmpqsortgetenvgetpwnamgetuidgetpwuidbsd_globboot_File__GlobPerl_Gthr_key_ptrpthread_getspecificPerl_Istack_sp_ptrPerl_Imarkstack_ptr_ptrPerl_Istack_base_ptrPerl_newSVpvPerl_new_versionPerl_sv_derived_fromPerl_vcmpXS_File__Glob_doglobPerl_newXS_flagsXS_File__Glob_constantPerl_newXSPerl_my_cxt_initPerl_Iunitcheckav_ptrPerl_Iscopestack_ix_ptrPerl_call_listPerl_Isv_yes_ptrPerl_formPerl_get_svPerl_sv_2pv_flagsPerl_vstringifyPerl_croakPerl_Iop_ptrPerl_sv_newmortalPerl_newSVpvf_nocontextPerl_sv_2mortalPerl_Icurpad_ptrPerl_Istack_max_ptrPerl_Isv_undef_ptrPerl_sv_setivPerl_mg_setPerl_stack_growPerl_Imy_cxt_list_ptrPerl_croak_xs_usagestrlenPerl_newSVpvnPerl_Itainted_ptrPerl_Itainting_ptrPerl_sv_magicPerl_sv_2iv_flagslibc.so.6__stack_chk_fail_edata__bss_start_endGLIBC_2.1.3GLIBC_2.3GLIBC_2.4GLIBC_2.2GLIBC_2.0si Bii Nii Xii bii l`_ _ _G_@_0_;``` ````` ` $` (` ,` 0`4`8`<`@`D`H`L`P`T`X`\```d`h`l`p`t`x` |`!`"`#`$`%`&`'`(`)`*`+`,`-`.`/`1`2`3`4`5`D`6`I`7`8`9`:`;`<`=`>`?US[ Pt-X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhUVSKu]t$x)9s 9rƃ[^]US.[Ktt $Ѓ[]Ë$ÐUWVSUKBtJыR1t-< &t$ uUB$MA[^_]UWVS<UqÞJu䉕eU1ҍ &9tdu틅@ @u1|$$D$Ue3u*<[^_]Ë|$$P$׍ʉ''t&'UWVS<UIu䉕eU1ҍ &9tdu틅@ @u1|$$D$Ue3u*<[^_]Ë|$$P(׍ʉ'&t&'UWVSLI;UPGf?t|f[f*E O_ɍ=wUĉMXMȋUċ ҍ=wUĉM2UċMȋ9ftV9u_f8@&;uu t&E D$U$f?u1L[^_]Í&Oft1f!EEEЋEfMM E}̃耉EY&=wMDMȋ<}EwM(UЋMȋ9tEf]f>-tuf;UЍt&=wMMȋ<}EwMUЋMȋ9E}U~=wUĉMmMȋUċ<9 Ev?f;UwEf;FwEߍ&}̋U9U؉Yff9„҉Bvft&L[^_]ÍvM}ЋMȋ8;&USEE$[]Í'UWVSLEԋ JüEEЋR"EEm؃L݃TL$$E؉FE؋U؅V}؉~}fuE+}8<$1učt&9t|u F uuċ}؋NMFF @u1L[^_]Ð}u7$UU9rlj$L[^_]ÍvE1҉UEm؃L݃Tw} $&E؋F&KVM؍$T$[]fUWVSt&ff]ufq؍t&'UWV Eu@@E UB EBBE uYȍ} f9suf} xzU? ^_]Ðt&tn}vfJ9s.t$\u\@tȃ@fBf} yU ^_]ÍZUE t t]Ðt&1]ÍUWVSLy3\$$$Z$E$$:$w$$$E|$$U@ $E$k$S@ E؋M܍})ǃ$$.$tE$$nT$D$$$$|$$$$sT$t$${$K$q|$t$$Av$$=T$D$t$ T$T$$+$$t$ T$T$$$$ T$D$$E$i$$Gtf$E$k$#8$%$K$0$$+|$t$$[$$$u0$$$ $$$ $|$$E\[^_]Í&$gB$hM؍\T$ Uԉ|$L$$$ $0t$D$$Uԅt@<f$$M؍_T$ Uԉ|$L$$X$$t$D$$\UԉUvv$P$v$^$U*$PUD$ "D$T$$qEt&F f@U$$t$$J\$$t$$A}Eu؍{UԉM$c$|$$$E>$dUԋ}MЉt$T$U܉|$ }L$M؉$T$ |$L$T$~EgUWVSI-<$$$*$E$$2$r$$E)$:$`$h@ $$6$E$$$|G puW Ũ$$UT$$$z$t$$Uԉ$S$y$Uԉ<[^_]$($N$8$$.$6@ Eft&$$UT$D$ |$$ut&֍k@8E$EW$}$+Eԃ}$($K$UԉB$$'UЉt$T$$E@ @t%$$UЉT$$UЍGEԉWF֍\ 8B oT@ v _  8oL oo o_"2BRbr"2BRbr"2BRbr"2BRbr`Glob.soz6.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.gnu_debuglink $"<oTTL( 0@@v8o EoL L `T  8]   f0a  l*r>>x8>8><@<@_O_O_O_O_O_O`PaQQ QFILE577f62ea/auto/IO/IO.soEELF4A4 (D8D8>NN>NN$$QtdRtd>NN,,GNUE).A󺈦imCO 7N'C(+D;"E4:1>B&I2!8%/-69)@0K *,<H. 3AGJ F# LM ?$5=;@ )$ $Dz;<>?ACDEFJKLM}͹0wqX򶚿|y }CE6˞?*cY~SaVQ2?w>qU8dZ + p|mG^2>"U. }?!M"r?I0}"rN (5 `#h @ d`& P3% P! P} x$ ,Z 2 O'   ? p/ !u ') __gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesboot_IOPerl_Istack_sp_ptrPerl_Imarkstack_ptr_ptrPerl_Istack_base_ptrPerl_newSVpvPerl_new_versionPerl_sv_derived_fromPerl_vcmpXS_IO__Seekable_getposPerl_newXSXS_IO__Seekable_setposXS_IO__File_new_tmpfileXS_IO__Poll__pollXS_IO__Handle_blockingPerl_newXS_flagsXS_IO__Handle_ungetcXS_IO__Handle_errorXS_IO__Handle_clearerrXS_IO__Handle_untaintXS_IO__Handle_flushXS_IO__Handle_setbufXS_IO__Handle_setvbufXS_IO__Handle_syncXS_IO__Socket_sockatmarkPerl_gv_stashpvnPerl_newSVivPerl_newCONSTSUBPerl_Iunitcheckav_ptrPerl_Iscopestack_ix_ptrPerl_call_listPerl_Isv_yes_ptrPerl_formPerl_get_svPerl_sv_2pv_flagsPerl_vstringifyPerl_croakPerl_sv_2ioPerl_PerlIO_filenoPerl_sv_newmortalPerl_sv_setivPerl_sv_setpvnPerl_croak_xs_usagefsync__errno_locationPerl_croak_nocontextPerl_PerlIO_flushPerl_Iop_ptrPerl_mg_setPerl_Icurpad_ptrPerl_PerlIO_clearerrPerl_PerlIO_errorPerl_sv_2iv_flagsPerlIO_ungetcfcntlPerl_sv_2mortalPerl_Isv_undef_ptrPerl_newSVPerl_sv_freePerl_sv_free2PerlIO_tmpfilePerl_newGVgenPerl_hv_common_key_lenPerl_do_opennPerl_newRVPerl_gv_stashpvPerl_sv_blessPerlIO_setposPerlIO_getposlibc.so.6_edata__bss_start_endGLIBC_2.1.3GLIBC_2.2.4GLIBC_2.0si ti ii POFOAOGOO O=OJOMO?OLOEOHONO;O8OIOCPPP PPPPP P $P (P ,P 0P4P8Pt)#X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`UVS:u]t$)9s 9rƃ[^]US.[:tt $Ѓ[]Ë$ÐUWVS:\u4$A4$E M4$4$E}U܋@ 4$|@ EԋMU؍M)4$R|EtbbD$D$4$g4$D$|$4$E䍃gD$JU|$4$T$B|$ 4$D$D$|$ 4$D$D$y|$ 4$D$D$Y|$ 4$D$D$9D$|$ D$4$D$D$'|$ 4$D$D$|$ 4$D$D$|$ 4$D$D$|$ 4$D$.D$|$ 4$D$BD$g|$ 4$D$TD$G|$ 4$D$gD$'|$ 4$D${D$D$|$ D$4$D$D$D$ D$D$4$CD$4$|$4$D$ D$D$4$g|$4$D$ D$D$4$=|$4$D$ D$D$@4$|$4$D$ D$D$4$|$4$D$ D$oD$4$|$4$D$ D$ED$4$|$4$D$ D$D$4$k|$4$D$ D$D$4$A|$4$D$ D$D$ 4$|$4$D$ D$D$ D$ D$4${D$4$|$4$D$ D$OD$4$|$4$D$ D$%D$4$u|$4$D$ !D$D$4$K|$4$D$ (D$D$4$!|$4$D$ 1D$D$4$|$4$D$ :D$}4$t$4$84$-|$4$D$;4$}84$4$,4$E܉\[^_]ÍvEԍP[L$ T$ỦMЉD$4$D$4$D$cŰMЅt@<fEԍSL$ MЉT$D$4$D$4$D$MЉM4$D$ "D$4$D$E^&G f@wMp|$4$T|$4$!}Eta}ԍoEỦMЉ4$D$ŰMЉ|$4$T$UԉL$D$ E܉T$D$ ED$D$rMfUWVS 92,u4$a4$E:4$E)4$U4$D$S@4$D$$Z4$EoM4$MM܉Ut'tFU4$CUT$4$D$4$4$E,[^_]f4$HD$ T$4$D$밍CD$E 4$D$bfUWVS0,u4$4$E:4$E) 4$^U4$D$@ D$4$$4$EM4$MWM܉Ut'tFU4$UT$4$D$4$;4$E,[^_]f4$HD$ T$4$D$밍v;4$m}84$뉍SD$E 4$D$vU8]9f/uu}4$84$1 M4$U)tD$4$gD$$$U8].uu}4$ 4$E4$UzU<M)~PU4$VUD4$D$P u@4$4$E%U8:]u}]ÍZD$E 4$D$TD$$$UWVS .,u4$14$E:4$E)4$~U4$D$#@ D$4$4$E?M4$MM܉Ut'tFU4$UT$4$D$4$c4$E,[^_]f4$HD$ T$4$D$밍vc4$}84$뉍SD$E 4$D$ t&'UWVS\É,,u4$4$ET:4$#E)4$}U܋4$E#@ 4$NjE4$D$~HQE4$U؋T$|$4$EYG @t |$4$UE<4$4$\E܉,[^_]Ðt&4$84$v@ <\EhSD$E 4$D$&UWVS+,u4$A4$E:4$E)4$U܋4$D$3@4$E@ 4$MɉEE4$D$1҉U؉4$%U؋T$U4$ET$E@ @t D$4$UE4$T4$E܉,[^_]Ív4$4$UU؋Mɋ@ EYUUSD$E 4$D$ UWVS\É),u4$4$ET:4$#E)4$U܋4$D$@4$E@ 4$EEE4$D$"‰U؉4$U؋T$U4$ET$JE@ @t D$4$UE4$4$JE܉,[^_]Ív4$4$UcU؋@ EEY